【问题标题】:Select only the most recent date of unique ids仅选择唯一 ID 的最近日期
【发布时间】:2021-04-27 00:34:15
【问题描述】:

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

假设我有一个如下所示的表 (postgres):

id date value
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 date value
1 2021-04-08 5
2 2021-04-12 11

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

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    你可以使用窗口功能:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-17
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 2012-04-15
      • 2019-05-11
      相关资源
      最近更新 更多