You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL中按日期排序后每5行递增序号的实现方法咨询

解决MySQL中按日期排序后每5条记录递增分组的问题

这个需求我之前处理过,用MySQL的窗口函数就能轻松搞定,不用绕复杂的逻辑~

核心实现思路

  1. 先按date列对所有记录排序,生成连续的行号
  2. 将行号除以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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 10:07:39