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

MySQL 5.5.62如何实现按日期重置的递增排序序号列

MySQL 5.5 按自然日分组生成每日递增序号解决方案

原语句问题说明

原SQL存在两个核心问题导致生成全局连续序号:

  • 仅使用单个递增变量,没有加入按自然日分组的判断逻辑,无法实现跨天序号重置
  • 日期过滤条件放在了UPDATE外层,子查询生成序号时扫描了全表数据,即使仅更新单日数据,获取到的也是全局维度的序号

可行实现方案

方案1:全表一次性生成所有历史日期的序号

适合需要一次性给历史所有数据按天补全pPrio值的场景,通过双用户变量判断日期边界,跨天自动重置序号:

UPDATE `dotable` t
JOIN (
    SELECT
        CASE 
            WHEN @prev_date = DATE(pDateHH) THEN @rn := @rn + 1
            ELSE @rn := 1 AND @prev_date := DATE(pDateHH)
        END AS pPrio,
        pDateHH,
        sID 
    FROM
        `dotable`,
        ( SELECT @rn := 0, @prev_date := NULL ) AS x 
    ORDER BY
        pDateHH ASC 
    ) q ON t.sID = q.sID 
SET t.pPrio = q.pPrio;

方案2:每日定时更新前一天的序号

适合日常调度仅处理前一天数据的场景,直接把日期过滤条件移到子查询内,子查询仅扫描单日数据,序号自然从1开始,性能更高:

UPDATE `dotable` t
JOIN (
    SELECT
        ( @rn := @rn + 1 ) AS pPrio,
        pDateHH,
        sID 
    FROM
        `dotable`,
        ( SELECT @rn := 0 ) AS x 
    WHERE DATE(pDateHH) = DATE_SUB(CURRENT_DATE,INTERVAL 1 DAY)
    ORDER BY
        pDateHH ASC 
    ) q ON t.sID = q.sID 
SET t.pPrio = q.pPrio;

内容的提问来源于stack exchange,提问作者Edward Sheriff Curtis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:00:01