获取每组最大字段的完整记录
Get entire record with max field for each group
有很多关于这个问题的答案,但是其中 none 检索了整个记录,但只有 ID...而我需要整个记录。
所以,我有一个由 4 列组成的 table status_changes
:
issue_id
: 更改所指的问题
id
:变化的id,就是一个SERIAL
status_from
和 status_to
实际上是问题之前的状态,以及问题当时的状态
when
这是发生这种情况的时间戳
没什么太疯狂的,但现在,我想为每一期都提供“最新的status_change
”。
我试过类似的方法:
select id
from change
group by issue_id
having when = max(when)
但这显然有两个大问题:
- select 包含不在分组依据中的字段
2 不能这样包含聚合函数
我想过“按 when
对每个组进行排序并使用类似 top(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;
这将 return 每个问题的第一个结果(具有最大 when
的结果)。
有很多关于这个问题的答案,但是其中 none 检索了整个记录,但只有 ID...而我需要整个记录。
所以,我有一个由 4 列组成的 table status_changes
:
issue_id
: 更改所指的问题id
:变化的id,就是一个SERIAL
status_from
和status_to
实际上是问题之前的状态,以及问题当时的状态when
这是发生这种情况的时间戳
没什么太疯狂的,但现在,我想为每一期都提供“最新的status_change
”。
我试过类似的方法:
select id
from change
group by issue_id
having when = max(when)
但这显然有两个大问题:
- select 包含不在分组依据中的字段 2 不能这样包含聚合函数
我想过“按 when
对每个组进行排序并使用类似 top(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;
这将 return 每个问题的第一个结果(具有最大 when
的结果)。