首页 > 解决方案 > 仅选择唯一 ID 的最近日期

问题描述

这应该是一个要解决的简单问题,但由于某种原因,我无法理解如何有效地做到这一点......

假设我有一个看起来像这样的表(postgres):

ID 日期 价值
1 2021-04-01 1
1 2021-04-03 10
1 2021-04-04 8
1 2021-04-05 3
1 2021-04-08 5
2 2021-04-04 3
2 2021-04-05 5
2 2021-04-07 5
2 2021-04-10 9
2 2021-04-12 11

我的目标是为每个 id 提取 1 行,这是该 id 的最新记录。

该表需要注意的重要特征是,最近的日期(按 id)在不同的 id 中是不一样的。所以我不能简单地查询 max(date) 并使用它来查询数据。我必须首先找到每个 id 的最近日期,并使用它来查询数据。

成功的查询将导致以下响应:

ID 日期 价值
1 2021-04-08 5
2 2021-04-12 11

我也在对大量数据进行此查询,因此需要尽可能优化此解决方案。

标签: postgresql

解决方案


您可以使用窗口功能:

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

推荐阅读