MySQL 8.0.21:获取每个fruit分组TableData的最新值
MySQL 8.0.21 获取指定类型分组的最新数据解决方案
针对需求:获取type为"fruit"的每个分组对应的TableData中的最新value(以TableData.id作为最新判断依据,id越大数据越新),提供两种可行的查询方案:
方案一:使用窗口函数(推荐,MySQL 8.0+支持)
利用ROW_NUMBER()窗口函数对每个分组内的数据按id降序排序,取排序后第一条数据即为最新值:
SELECT n.name, d.value FROM TableNames n INNER JOIN ( SELECT id_group, value, ROW_NUMBER() OVER (PARTITION BY id_group ORDER BY id DESC) AS rn FROM TableData ) d ON d.id_group = n.id_group WHERE n.type = 'fruit' AND d.rn = 1;
方案二:关联子查询(兼容旧版本)
先通过分组查询得到每个id_group对应的最大id,再关联TableData获取对应value:
SELECT n.name, d.value FROM TableNames n INNER JOIN TableData d ON d.id_group = n.id_group INNER JOIN ( SELECT id_group, MAX(id) AS max_id FROM TableData GROUP BY id_group ) max_d ON d.id_group = max_d.id_group AND d.id = max_d.max_id WHERE n.type = 'fruit';
以上两种方案均可得到期望输出:
| name | value |
|---|---|
| AppleGroup | 3 |
| BananaGroup | 4 |
内容的提问来源于stack exchange,提问作者johnnytolengo
相关产品推荐
相关产品推荐

