当 ID 列不同时,在 SQL 中选择最近的重复项

Pick most recent duplicate in SQL when ID column is different

好吧,假设我有这样的数据:

 ID   GROUP                TIMESTAMP    col_OTHER    
001      AA  2021-04-02 15:02:33.319       mangos
002      BB  2021-04-01 05:56:35.334        kiwis
004      AA  2021-04-02 03:51:35.279      oranges
003      DD  2021-04-01 18:24:23.469      oranges
003      DD  2021-04-02 12:16:21.539      bananas
002      CC  2021-04-02 11:02:51.313       apples

所以我真正想做的就是使用 SQL 来操纵它,以便在有多个 ID 时提供具有最新日期的 DF。

最终产品:

 ID   GROUP                TIMESTAMP    col_OTHER    
001      AA  2021-04-02 15:02:33.319       mangos
004      AA  2021-04-02 03:51:35.279      oranges
003      DD  2021-04-02 12:16:21.539      bananas
002      CC  2021-04-02 11:02:51.313       apples

我的主管建议我按 ID 和组进行分区,然后 select 最大值(时间戳)以便我们保留最新的组。但是 PARTITION() 甚至是必要的吗???也许他想保留网站用户的数量,但也只保留 select 上面的那些。

你可以这样做:

select *
from (
  select *,
    row_number() over(partition by id order by timestamp desc) as rn
  from t
) x
where rn = 1

您还可以使用 window 函数 RANK()

PARTITION 定义了获得递增数字的行组。

如果没有它,您将获得 **所有++ 行的序列号,因此可能无法仅获得第一个或第二个或您想要的数字

CREATE TABLE table1 (
  `ID` VARCHAR(4),
  `GROUP` VARCHAR(2),
  `TIMESTAMP` TIMESTAMP,
  `col_OTHER` VARCHAR(7)
);

INSERT INTO table1
  (`ID`, `GROUP`, `TIMESTAMP`, `col_OTHER`)
VALUES
  ('001', 'AA', '2021-04-02 15:02:33.319', 'mangos'),
  ('002', 'BB', '2021-04-01 05:56:35.334', 'kiwis'),
  ('004', 'AA', '2021-04-02 03:51:35.279', 'oranges'),
  ('003', 'DD', '2021-04-01 18:24:23.469', 'oranges'),
  ('003', 'DD', '2021-04-02 12:16:21.539', 'bananas'),
  ('002', 'CC', '2021-04-02 11:02:51.313', 'apples');
sELECT 
`ID`, `GROUP`, `TIMESTAMP`, `col_OTHER`
FROM ( SELECT *,
         RANK() OVER (
          PARTITION BY ID 
          ORDER BY `TIMESTAMP` DESC) rnk
  FROM table1) t1
 WHERE rnk = 1
ID  | GROUP | TIMESTAMP           | col_OTHER
:-- | :---- | :------------------ | :--------
001 | AA    | 2021-04-02 15:02:33 | mangos   
002 | CC    | 2021-04-02 11:02:51 | apples   
003 | DD    | 2021-04-02 12:16:22 | bananas  
004 | AA    | 2021-04-02 03:51:35 | oranges  

db<>fiddle here