PostgreSQL获取指定a值组中最大id行的SQL语句写法
解决方案
你的源表数据整理如下:
| id | a |
|---|---|
| 1 | 1 |
| 2 | 1 |
| 3 | 2 |
| 4 | 3 |
| 5 | 3 |
| 6 | 4 |
| 7 | 4 |
预期输出:
| id | a |
|---|---|
| 2 | 1 |
| 5 | 3 |
以下是几种可行的PostgreSQL SQL写法:
方法一:子查询关联
先筛选目标a值,分组获取每个a对应的最大id,再关联原表拿到完整记录:
SELECT t.* FROM your_table t JOIN ( SELECT a, MAX(id) AS max_id FROM your_table WHERE a IN (1, 3) GROUP BY a ) sub ON t.id = sub.max_id AND t.a = sub.a;
方法二:窗口函数ROW_NUMBER()
利用窗口函数按a分组、id降序排序,取每组第一条记录:
SELECT id, a FROM ( SELECT id, a, ROW_NUMBER() OVER (PARTITION BY a ORDER BY id DESC) AS rn FROM your_table WHERE a IN (1, 3) ) sub WHERE rn = 1;
方法三:PostgreSQL专属DISTINCT ON语法
用PostgreSQL特有的DISTINCT ON语法,简洁实现分组取第一条:
SELECT DISTINCT ON (a) id, a FROM your_table WHERE a IN (1, 3) ORDER BY a, id DESC;
注意:将语句中的your_table替换为你的实际表名即可。
内容的提问来源于stack exchange,提问作者Changkun
相关产品推荐
相关产品推荐

