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

如何用SQL对每秒DateTime数据计算每小时平均值?

按小时统计Value平均值的SQL实现方案

没问题,我来帮你搞定这个按小时统计平均值的需求~核心思路是把每秒的时间戳截断到小时级别,然后按这个截断后的时间分组,计算对应时段的Value平均值。下面针对不同主流数据库给出具体实现:

1. MySQL/MariaDB

方案一(MySQL 8.0+ 推荐)

用DATE_TRUNC函数直接截断时间到小时:

SELECT 
  DATE_TRUNC('hour', oDateTime) AS oDateTime,
  AVG(Value) AS Value
FROM your_table_name
GROUP BY DATE_TRUNC('hour', oDateTime)
ORDER BY oDateTime;

方案二(兼容旧版MySQL)

用DATE_FORMAT格式化时间为小时起始点:

SELECT 
  DATE_FORMAT(oDateTime, '%Y-%m-%d %H:00:00') AS oDateTime,
  AVG(Value) AS Value
FROM your_table_name
GROUP BY DATE_FORMAT(oDateTime, '%Y-%m-%d %H:00:00')
ORDER BY oDateTime;

2. SQL Server

方案一(SQL Server 2022+ 推荐)

支持DATE_TRUNC函数:

SELECT 
  DATE_TRUNC(hour, oDateTime) AS oDateTime,
  AVG(Value) AS Value
FROM your_table_name
GROUP BY DATE_TRUNC(hour, oDateTime)
ORDER BY oDateTime;

方案二(兼容旧版SQL Server)

用DATEADD+DATEDIFF组合截断时间:

SELECT 
  DATEADD(hour, DATEDIFF(hour, 0, oDateTime), 0) AS oDateTime,
  AVG(Value) AS Value
FROM your_table_name
GROUP BY DATEADD(hour, DATEDIFF(hour, 0, oDateTime), 0)
ORDER BY oDateTime;

3. PostgreSQL

直接使用DATE_TRUNC函数即可:

SELECT 
  DATE_TRUNC('hour', oDateTime) AS oDateTime,
  AVG(Value) AS Value
FROM your_table_name
GROUP BY DATE_TRUNC('hour', oDateTime)
ORDER BY oDateTime;

关键说明

  • DATE_TRUNC(或格式化函数)的作用是把任意秒级时间戳转换为对应小时的起始时间(比如2017-01-01 00:05:30会变成2017-01-01 00:00:00),这样同一小时内的所有记录会被归为一组。
  • AVG(Value)负责计算该小时内所有Value的平均值。
  • 最后加上ORDER BY oDateTime可以保证结果按时间顺序排列,方便查看。
  • 如果只需要统计特定日期的数据,可以在FROM后加WHERE子句,比如WHERE oDateTime >= '2017-01-01' AND oDateTime < '2017-01-02'。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:21:47