咨询MySQL 8中查询每月最早2条存在记录的SQL实现方法
获取每月最早2天的记录(MySQL 8)
完全可以用纯SQL搞定,而且比存储过程或后端过滤高效得多,尤其适合大型数据集。MySQL 8支持窗口函数,用ROW_NUMBER()就能轻松实现需求:
SELECT * FROM ( SELECT *, ROW_NUMBER() OVER ( PARTITION BY YEAR(date_col), MONTH(date_col) ORDER BY date_col ASC ) AS row_num FROM your_table ) ranked WHERE row_num <= 2;
关键部分说明:
PARTITION BY YEAR(date_col), MONTH(date_col):把数据按年份+月份分组,确保每个月单独计算排名ORDER BY date_col ASC:在每个月的分组内,按日期从小到大排序ROW_NUMBER():给每个月内的记录按排序结果分配序号,最早的日期序号为1,次早为2- 外层查询筛选
row_num <=2,就能拿到每个月最早的2天记录
适配你的场景:
比如二月只有3日到25日的数据,这个查询会自动把3日、4日的记录筛选出来——因为它们是该月存在的最早两个日期,完全符合你的需求。
优势:
相比存储过程或后端过滤,这种方法直接在数据库层面完成计算,不需要把全量数据拉到后端处理,大幅减少数据传输开销,对大型数据集更友好。
内容的提问来源于stack exchange,提问作者Kiran
相关产品推荐
相关产品推荐

