提取 table 中具有重复 ID 的最新记录

Pull latest record in table with duplicate ID's

ID DATE col1
1 01-01-2022 apple
1 01-02-2022 orange

自从我使用 sql(使用 oracle fyi)以来已经有一段时间了。如果我想提取具有最新日期的唯一 ID(在这种情况下,结果中只应提取第二行),我该怎么做?

我试过了:

SELECT ID, MAX(DATE), col1
FROM table
GROUP BY ID

现在这不起作用,因为我需要在 SELECT 中聚合 col1 或将其放入 GROUP BY。如果我把它放在 GROUP BY 中,我会得到结果中的两行,对吗?但是如果我想要基于 max(date) 的行,我也看不到聚合 col1 的意义。我在这里遗漏了什么吗?

您可以使用 ROW_NUMBER()。例如:

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

您可以使用 LAG(), LEAD() ROW_NUMBER() 函数来达到这个目的。检查我的以下查询。

使用 LAG():

SELECT 
    ID, 
    DATE, 
    col1
FROM 
(
    SELECT 
        *,
        LAG(DATE, 1) OVER(Partition By ID ORDER BY DATE DESC) AS DateOfPreviousRow
     FROM Table
) T
WHERE DateOfPreviousRow IS NULL

使用 LEAD():

SELECT 
    ID, 
    DATE, 
    col1
FROM 
(
    SELECT 
        *,
        LEAD(DATE, 1) OVER(Partition By ID ORDER BY DATE) AS DateOfPreviousRow
    FROM Table
) T
WHERE DateOfPreviousRow IS NULL

使用ROW_NUMBER():

SELECT T.* FROM 
(
   SELECT 
       *,
       ROW_NUMBER() OVER(PARTITION BY ID ORDER BY DATE DESC) AS ROWNumber
   FROM Table
) T
WHERE ROWNumber = 1