MySQL中按日期排序后每5行递增序号的实现方法咨询
解决MySQL中按日期排序后每5条记录递增分组的问题
这个需求我之前处理过,用MySQL的窗口函数就能轻松搞定,不用绕复杂的逻辑~
核心实现思路
- 先按
date列对所有记录排序,生成连续的行号 - 将行号除以5后向上取整,自然就能得到每5条一组的递增编号
完整SQL代码(MySQL 8.0+版本)
假设你的表名为your_table,包含date列,执行以下查询即可得到示例中的效果:
SELECT `date`, CEIL(ROW_NUMBER() OVER (ORDER BY `date`) / 5) AS Number FROM your_table ORDER BY `date`;
代码细节解释
ROW_NUMBER() OVER (ORDER BY date):按date排序后,为每条记录生成从1开始的连续行号(比如前5条是1-5,第6到10条是6-10)CEIL(行号 / 5):对行号除以5的结果向上取整,这样前5条会得到1,第6条开始自动变成2,完美匹配你要的分组递增效果
兼容低版本MySQL(低于8.0)的写法
如果你的MySQL版本不支持窗口函数,可以用变量来实现相同逻辑:
SELECT `date`, CEIL(@row_num := @row_num + 1 / 5) AS Number FROM your_table, (SELECT @row_num := 0) AS init_var ORDER BY `date`;
这里先初始化一个变量@row_num,每遍历一条记录就自增1,再通过取整操作得到分组编号,逻辑和窗口函数完全一致。
内容的提问来源于stack exchange,提问作者waluo
相关产品推荐
相关产品推荐

