如何在SQL中按条件查询,获取同ID下最大status key对应的行
需求实现SQL方案
假设你的表名为your_table,包含id、status_key两列,可根据实际场景替换为你的真实表名、列名。
方案1:窗口函数(适配所有支持标准SQL的现代数据库,如MySQL 8.0+、PostgreSQL、Oracle等)
SELECT id, status_key FROM ( SELECT id, status_key, -- 按ID分组,组内按status_key倒序排序,生成序号 ROW_NUMBER() OVER (PARTITION BY id ORDER BY status_key DESC) AS rn FROM your_table ) t WHERE rn = 1;
- 备注:如果同一个ID下存在多条status_key为最大值的记录,要全部返回可将
ROW_NUMBER()替换为RANK()。
方案2:子查询关联(兼容MySQL 5.x等不支持窗口函数的旧版本数据库)
SELECT t1.id, t1.status_key FROM your_table t1 INNER JOIN ( -- 先查出每个ID对应的最大status_key SELECT id, MAX(status_key) AS max_status FROM your_table GROUP BY id ) t2 ON t1.id = t2.id AND t1.status_key = t2.max_status;
- 备注:该方案默认返回同一个ID下所有status_key等于最大值的记录。
内容的提问来源于stack exchange,提问作者Ugur_irk
相关产品推荐
相关产品推荐

