首页 > 解决方案 > 获取查询中给出的每个 id 的最大值(Postgres)

问题描述

我有这样的查询

select distinct on (foreign_id) foreign_id, id, date
from table
where foreign_id IN (1, 2, 3)

我得到的结果是

外国身份证 ID 日期
1 101 2019-03-20
2 102 2020-02-06
3 103 2020-06-09

这很好,因为我只想获得每个foreign_id 的单行,但我想获得结果中包含最大日期和最大id 值的行。

现在对于 ID 号 1,我得到的日期是 2019-03-20,这不是表中最大的日期

我曾尝试使用 max() 函数,但它仅从给定的 foreign_id 返回一行

有任何想法吗?

标签: sqlpostgresql

解决方案


您可以使用如下分析函数:

select select foreign_id, id, date from
(select foreign_id, id, date, 
        row_number() over (partition by foreign_id order by date desc) as rn
   from table
  where foreign_id IN (1, 2, 3) ) t
where rn = 1

推荐阅读