MySQL如何按code分组查询每个编码对应的最新日期价格记录
问题原因
你原查询的子查询SELECT MAX(date) FROM prices是取整张表的最大日期,没有按code分组,自然只能返回全表最新日期对应的所有记录,无法拿到每个编码各自最新日期的价格。
解决方法
方法1:MySQL 8.0+ 窗口函数方案(最简洁)
用ROW_NUMBER()窗口函数按编码分组、按日期倒序排序,取每个分组排序第一的记录即可:
SELECT code, price, date FROM ( SELECT code, price, date, ROW_NUMBER() OVER (PARTITION BY code ORDER BY date DESC) AS rn FROM prices ) t WHERE rn = 1;
如果存在同一个code同一个最新日期有多条价格记录的情况,想全部返回可以把ROW_NUMBER()换成RANK()。
方法2:兼容MySQL 5.x 版本的关联查询方案
先通过分组查询拿到每个code对应的最新日期,再和原表关联匹配出对应价格:
SELECT p.code, p.price, p.date FROM prices p INNER JOIN ( SELECT code, MAX(date) AS max_date FROM prices GROUP BY code ) t ON p.code = t.code AND p.date = t.max_date;
内容的提问来源于stack exchange,提问作者Myers
相关产品推荐
相关产品推荐

