如何使用SQL查询每个有交易记录月份最后一日的对应交易数据
解决方案
你可以用窗口函数的方式实现需求,该写法兼容MySQL 8.0+、PostgreSQL、SQL Server、Oracle等所有支持窗口函数的主流数据库:
SELECT Year, Month, Amount FROM ( SELECT Year, Month, Amount, -- 同年同月的记录按日期倒序排序,最大的日期序号为1 ROW_NUMBER() OVER (PARTITION BY Year, Month ORDER BY Day DESC) AS rn FROM 你的表名 ) t WHERE rn = 1 ORDER BY Year, Month;
如果你用的是不支持窗口函数的低版本数据库(比如MySQL 5.x),可以用关联匹配的写法:
SELECT t1.Year, t1.Month, t1.Amount FROM 你的表名 t1 INNER JOIN ( -- 先查到每个月的最大交易日 SELECT Year, Month, MAX(Day) AS max_day FROM 你的表名 GROUP BY Year, Month ) t2 ON t1.Year = t2.Year AND t1.Month = t2.Month AND t1.Day = t2.max_day ORDER BY t1.Year, t1.Month;
两种写法的逻辑都是先定位每个年月的最大日期,再匹配该日期对应的Amount值,最终输出结果和你要求的格式一致。
内容的提问来源于stack exchange,提问作者JustABeginner
相关产品推荐
相关产品推荐

