tsql - 在 SQL 中取每小时平均值

标签 tsql ssms average

我有一个包含 2 个字段的 SQL 表:TimeStamp 和 Value。以下是部分数据的摘录。

2005-02-17 13:31:00     2
2005-02-17 13:46:00     3
2005-02-17 14:01:00     1.7
2005-02-17 14:16:00     2.3
2005-02-17 14:31:00     2
2005-02-17 14:46:00     2.5
2005-02-17 15:01:00     2.2
2005-02-17 15:16:00     2.4
2005-02-17 15:31:00     2.6
2005-02-17 15:46:00     2.6
2005-02-17 16:01:00     2.7

我正在尝试计算 Value 列的每小时平均值,但是我似乎无法正确执行此操作。最终输出将显示 TimeStamp 的开始时间,以及 Value 列的平均值。

对于最终输出,我希望获得完整的时间戳,而不仅仅是小时。因此,从 2005-02-17 的 14:00 - 14:59 开始,结果输出将是:
2005-02-17 14:00:00    2.125

最佳答案

我会这样做:

SELECT      CAST(FLOOR(CAST(timestamp AS float)) AS datetime) AS day --strip time
            , DATEPART(hh, timestamp) AS hour
            , AVG(value) AS average
FROM        times
GROUP BY    CAST(FLOOR(CAST(timestamp AS float)) AS datetime)
            , DATEPART(hh, timestamp)

示例 fiddle .

关于tsql - 在 SQL 中取每小时平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9744144/

相关文章:

sql-server - 如何将一个具有标识的表复制到另一台 SQL Server

sql - 如何将 SQL Server 数据库中的所有日期时间记录更新为 UTC 时间?

sql-server - GO 在 SQL Server Management Studio 和 Transact SQL 中有何用途?

vb.net 中的 mysql avg() 函数

python - 计算日期列表之间的平均天数

mysql - SQL 选择计数和 AVG

sql - 分组时在输出中获取一列,但仅当分组列只有一行时才对该列进行分组

sql-server - 禁用 SA,创建新登录,将数据库角色成员更改为数据库所有者

sql-server - 由于加密消息,无法将存储过程添加到数据库

sql - 创建存储过程