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

SQL实现按24小时间隔分段统计近120小时分组记录数

实现方法

核心逻辑是先计算每条记录的更新时间距当前时间的小时差,匹配对应的24小时时段标签,过滤120小时前的历史数据后,同时按业务字段、时段标签做分组聚合,即可返回要求的三列统计结果。
可直接运行的SQL代码如下(适配MySQL语法,和你原有SQL的函数体系兼容):

SELECT 
  COUNT(*) AS `count`,
  table_column AS `column`,
  CASE
    WHEN TIMESTAMPDIFF(HOUR, UPDATED_TIME, NOW()) >= 0 AND TIMESTAMPDIFF(HOUR, UPDATED_TIME, NOW()) < 24 THEN '0-24'
    WHEN TIMESTAMPDIFF(HOUR, UPDATED_TIME, NOW()) >= 24 AND TIMESTAMPDIFF(HOUR, UPDATED_TIME, NOW()) < 48 THEN '24-48'
    WHEN TIMESTAMPDIFF(HOUR, UPDATED_TIME, NOW()) >= 48 AND TIMESTAMPDIFF(HOUR, UPDATED_TIME, NOW()) < 72 THEN '48-72'
    WHEN TIMESTAMPDIFF(HOUR, UPDATED_TIME, NOW()) >= 72 AND TIMESTAMPDIFF(HOUR, UPDATED_TIME, NOW()) < 96 THEN '72-96'
    WHEN TIMESTAMPDIFF(HOUR, UPDATED_TIME, NOW()) >= 96 AND TIMESTAMPDIFF(HOUR, UPDATED_TIME, NOW()) < 120 THEN '96-120'
  END AS `time`
FROM table_name
WHERE UPDATED_TIME >= DATE_SUB(NOW(), INTERVAL 120 HOUR)
GROUP BY table_column, `time`
ORDER BY `column`, 
  CASE `time`
    WHEN '0-24' THEN 1
    WHEN '24-48' THEN 2
    WHEN '48-72' THEN 3
    WHEN '72-96' THEN 4
    WHEN '96-120' THEN 5
  END;

注意事项

  • 原SQL使用CURDATE()取当日零点作为时间计算基准,会导致统计区间和真实的「距当前N小时」存在偏差,这里改用NOW()取当前实时时间计算,保证每个时段都是严格的24小时间隔
  • 原SQL写SELECT *配合GROUP BY的写法不规范,会触发MySQLONLY_FULL_GROUP_BY模式报错,返回结果也不符合聚合统计的要求,必须明确指定需要返回的统计字段、分组字段
  • 如果后续需要扩展统计更长的时间范围,直接在CASE语句里追加对应的时段判断分支即可

内容的提问来源于stack exchange,提问作者Durgesh gupta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 23:45:56