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

MySQL按小时统计attendancetime对应ID数量的SQL查询需求

问题

我有一个包含id和attendancetime列的MySQL表,希望按小时统计id的数量。

示例数据表

idattendancetime
11725256398
21725258398
31725264581
41725277777
51725277777
61725277777
71725298931
81725299156
91725299156

期望结果

TIMECOUNT
11:002
01:001
05:003
11:003

尝试的查询语句

SELECT 
    CONCAT(
        DATE(FROM_UNIXTIME(attendancetime)), ' ',
        LPAD(FLOOR(HOUR(FROM_UNIXTIME(attendancetime)) / 3) * 3, 2, '0'), ':00:00'
    ) AS TIME,
    count(id) AS COUNT
FROM operationallog
GROUP BY DATE(FROM_UNIXTIME(attendancetime)), FLOOR(HOUR(FROM_UNIXTIME(attendancetime)) / 3)
ORDER BY TIME;
解决方案

你之前的查询是按3小时区间分组,不符合按单个小时统计的需求,且期望结果仅需HH:00格式的小时部分。以下是符合要求的查询语句:

SELECT
    DATE_FORMAT(FROM_UNIXTIME(attendancetime), '%H:00') AS TIME,
    COUNT(id) AS COUNT
FROM operationallog
GROUP BY DATE_FORMAT(FROM_UNIXTIME(attendancetime), '%H:00')
ORDER BY TIME;

说明:

  1. FROM_UNIXTIME(attendancetime)将Unix时间戳转换为MySQL的datetime格式
  2. DATE_FORMAT(..., '%H:00')提取小时部分并格式化为HH:00形式
  3. 按格式化后的小时字符串分组,统计对应小时内的id数量
  4. 最终按TIME字段排序,保证结果顺序规范

如果需要区分不同日期的同一小时(比如2024-09-02 11:00和2024-09-03 11:00),可以修改为包含日期的格式:

SELECT
    DATE_FORMAT(FROM_UNIXTIME(attendancetime), '%Y-%m-%d %H:00') AS TIME,
    COUNT(id) AS COUNT
FROM operationallog
GROUP BY DATE_FORMAT(FROM_UNIXTIME(attendancetime), '%Y-%m-%d %H:00')
ORDER BY TIME;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 18:55:10