获取每个组的最大字段的整个记录

Posted

技术标签:

【中文标题】获取每个组的最大字段的整个记录【英文标题】:Get entire record with max field for each group 【发布时间】:2021-08-14 17:53:10 【问题描述】:

关于这个问题有很多答案,但没有一个会检索整个记录,而只有ID......而且我需要整个记录。

所以,我有一个由 4 列组成的表 status_changes

    issue_id : 变更所指的问题 id:更改的id,只是一个SERIAL status_fromstatus_to 实际上是问题之前的状态,以及问题当时的状态 when 这是发生这种情况的时间戳

没什么太疯狂的,但现在,我希望每个问题都有“最新的status_change”。

我尝试了类似的方法:

select id
from change 
group by issue_id
having when = max(when)

但这显然有两个大问题:

    select 包含不在 group by 中的字段 2 不能以这种方式包含聚合函数

我想过“按when 对每个组进行排序并使用top(1) 之类的东西,但我不知道该怎么做...

【问题讨论】:

【参考方案1】:

使用 PostgreSQL 的DISTINCT ON:

SELECT DISTINCT ON (issue_id)
       id, issue_id, status_from, statue_to, when
FROM change
ORDER BY issue_id, when DESC;

这将返回每个问题的第一个结果(when 最大的结果)。

【讨论】:

我刚刚在postgresql.org/docs/9.5/sql-select.html 看到这个,非常感谢

以上是关于获取每个组的最大字段的整个记录的主要内容,如果未能解决你的问题,请参考以下文章

优化查询以获取整行,其中一个字段是组的最大值

oracle 查询每组的最大值

SQL:查找每组的最大记录[重复]

SQL:查找每组的最大记录[重复]

怎么用sql语句获取每一组的第一条记录(包括所有字段,不是单个字段)

数据库查询每个字段对应的最大值