首页 > 解决方案 > 如何按年返回最高平均小时值

问题描述

我有一个每 10 分钟读取一次的 SQL 读数表。列是 Date_Time (DateTime) 和 Steam_Flow (Real)。我想得到一个摘要,它每年只返回一行,代表那一年的最高平均流量(按小时)。

表格和预期结果

到目前为止,我有以下...

SELECT
    CAST(Date_Time AS DATE) [Date],
    DATEPART(hour, Date_Time) [Hour],
    Avg(Steam_Flow) [Avg Flow]
FROM Boiler_Data
WHERE
    Date_Time >= '2018-12-31 21:00'
    and Date_time <= '2019-01-01 02:50:'
GROUP BY
    CAST(Date_Time AS DATE),
    DATEPART(hour, Date_Time)
ORDER BY [Avg Flow] Desc

标签: sql-server

解决方案


您可以使用聚合查询来计算每小时的平均流量,然后在外部查询中按年份聚合。

在 MySQL 中:

SELECT x.date_year, MAX(x.Avg_Flow)
FROM (
    SELECT YEAR(date_time) date_year, avg(Flow) Avg_Flow
    FROM mytable 
    GROUP BY YEAR(date_time), DATE_FORMAT(date_time, '%Y-%m-%d %h')
) x
GROUP BY x.date_year

在 SQL Server 中:

SELECT x.date_year, MAX(x.Avg_Flow)
FROM (
    SELECT YEAR(date_time) date_year, avg(Flow) Avg_Flow
    FROM mytable 
    GROUP BY YEAR(date_time), DATEADD(hour, datediff(hour, 0, date_time), 0)
) x
GROUP BY x.date_year

推荐阅读