【发布时间】:2014-11-19 13:09:57
【问题描述】:
我有两张桌子:
tbl_status:
id
status_code
month_digest_id
project_id
tbl_project
id
name
tbl_month_digest:
id
month_ts
我有一个项目。每个项目都有零个或多个月的状态(存储在 tbl_month_digest 中)。给定一个项目 ID 列表,我需要获取最新的状态对象。
我在执行此操作时遇到了问题。在 MySQL 中,我可以从 tbl_month_digest 和 tbl_status 的连接中进行选择,并添加 having tbl_month_digest.month_ts = max(tbl_month_digest.month_ts)。 Postgres 坚持要我将 tbl_month_digest.month_ts 添加到 group by,这并没有达到预期的效果。
是否可以在 postgresql 的单个 SQL 查询中获取项目列表的最新状态?
示例数据和预期结果:
tbl_month_digest:
id month_ts
1 2014-05-01
2 2014-06-01
3 2014-07-01
tbl_project:
id name
90 'Foundation'
91 'Testing'
92 'Examination'
tbl_status:
id project_id month_digest_id status_code
1 90 1 'on_track'
2 90 2 'on_track'
3 90 3 'late'
4 91 1 'late'
5 91 2 'unknown'
6 91 3 'unknown'
7 92 1 'late'
8 92 2 'late'
9 92 3 'on_track'
给定项目 ID 90 和 91,我想获得
project_id latest_status
90 'late'
92 'on_track'
【问题讨论】:
标签: sql postgresql greatest-n-per-group