【问题标题】:Removing duplicates rows by max date on ordered table在有序表上按最大日期删除重复行
【发布时间】:2025-12-20 15:25:14
【问题描述】:

我有一个包含以下数据的示例表

示例表

ID DATE NAME
9 2021-04-13 21:39:00.569000 ABC
8 2020-12-17 16:49:17.903000 ABC
7 2020-12-16 16:49:17.903000 ABC
6 2020-06-09 09:55:52.005000 WER
5 2020-06-09 09:55:52.004000 WER
4 2020-06-08 09:48:43.318000 YTG
3 2020-06-05 14:51:42.860000 YTG
2 2020-04-28 13:58:30.972000 YTG
1 2020-04-25 13:58:30.972000 ABC

而且我想为表中的每个不同名称获取它的最大日期,直到找到一个不同的名称。所以结果集一定是这样的

预期输出

ID DATE NAME
9 2021-04-13 21:39:00.569000 ABC
6 2020-06-09 09:55:52.005000 WER
4 2020-06-08 09:48:43.318000 YTG
1 2020-04-25 13:58:30.972000 ABC

我尝试了如下的sql查询,没有结果。

select NAME
from
(
  select NAME, max(DATE) - min(DATE) as diff
  from Example_Table
  group by NAME
) ex
order by diff desc;

【问题讨论】:

  • 您的查询和预期的输出彼此无关。您想要每个名称的最大日期(您的查询,至少是一种)还是每个名称的最大日期的完整行(您的预期输出)?

标签: sql oracle performance


【解决方案1】:

使用lead():

select t.*
from (select t.*,
             lead(name) over (order by date) as next_name
      from t
     ) t
where next_name is null or next_name <> name;

【讨论】:

  • 感谢您的回答。这对我的情况很有用。