TSQL GroupBy 每 X 秒值一次

问题描述 投票:0回答:1

我有这样的疑问:

DECLARE @NUM AS INT --IT INDICATE THE NUMBER OF SECONDS TO GROUP THE DATA
DECLARE @DATA_START AS DATETIME = DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0)
DECLARE @DATA_END AS DATETIME = GETDATE()

SELECT AVG(D.VALORE)
FROM AA_V_DATI_MISURAZIONE D
WHERE D.STARTDATE >= @DATA_START AND D.ENDDATE <= @DATA_END

现在我需要每 @NUM 秒增加“D.Valore”组的平均值。

编辑 所以这是我的查询:

SELECT dateadd(day,
              datediff(SECOND, @DATA_START , D.DataOra) / @NUM,
              @DATA_START) as DATAORA,
                AVG(D.Valore) AS MEDIAVALORE
            FROM AA_V_DatiMisurazione D 
            WHERE D.STARTDATE >= @DATA_START AND D.STARTDATE <= @DATA_END 
            GROUP BY datediff(SECOND, @DATA_START , D.DataOra) / @NUM
            ORDER BY DATAORA
sql tsql group-by intervals
1个回答
0
投票

老实说,最简单的方法就是使用

DATE_BUCKET
(假设您使用的是最新版本的 SQL Server,但您并没有说不是):

SELECT DATE_BUCKET(SECOND, @NUM, STARTDATE) AS Second_Bucket,
       AVG(D.VALORE) AS AvgValore
FROM AA_V_DATI_MISURAZIONE D
WHERE D.STARTDATE >= @DATA_START AND D.ENDDATE <= @DATA_END
GROUP BY DATE_BUCKET(SECOND, @NUM, STARTDATE);
© www.soinside.com 2019 - 2024. All rights reserved.