SQL查询每个id对应多行时如何选取最后一条记录
解决方案
你需求中的「每个id的最后一条记录」可通过parent_id字段的大小判断:parent_id越大对应记录越靠后,以下是两种常用的实现方案:
方案1:窗口函数法(兼容MySQL8.0+、PostgreSQL、SQL Server、Oracle等所有支持SQL:2003标准的数据库)
通过ROW_NUMBER()窗口函数对相同id的记录按parent_id倒序排序,取排序后第一位的记录即可:
SELECT id, category FROM ( SELECT id, category, ROW_NUMBER() OVER (PARTITION BY id ORDER BY parent_id DESC) AS rn FROM 你的表名/视图名 ) AS temp WHERE rn = 1;
方案2:子查询关联法(兼容MySQL5.x等不支持窗口函数的低版本数据库)
先通过分组查询拿到每个id对应的最大parent_id,再关联原表匹配对应category值:
SELECT t1.id, t1.category FROM 你的表名/视图名 t1 INNER JOIN ( SELECT id, MAX(parent_id) AS max_pid FROM 你的表名/视图名 GROUP BY id ) t2 ON t1.id = t2.id AND t1.parent_id = t2.max_pid;
两种方案执行后均可得到你需要的结果:
| id | category |
|---|---|
| 01 | car |
| 02 | bike |
| 03 | van |
| 04 | bicycle |
内容的提问来源于stack exchange,提问作者Patiphon Ongartittichai
相关产品推荐
相关产品推荐

