Sql 动态时间间隔查询

Sql query with dynamic Time Interval

我正在尝试获取 15 分钟时间间隔内的平均值。我正在关注这个 。我想弄清楚如何保留用户定义的第一个时间戳,下一个时间戳与开始时间戳相隔 15 分钟。

|TimeStamp|Tasks|VAL1|VAL2|
|---------|-----|----|----|
|11:12:30 |40   | 12 |16  |
|11:17:30 |40   | 26 |24  |

这是我正在使用的代码:

SELECT
   DateAdd(minute, 15*(DateDiff(minute, 0, NEW_LOG.[DT_Stamp]) / 15), 0) As Timestamp,
   Count(*) as Tasks,
   AVG(NEW_LOG.[CPU-400/TAGS_PLANT_A.IN9]) AS [VAL1],
   AVG(NEW_LOG.[CPU-400/TAGS_PLANT_A.IN10]) AS [VAL2]
FROM
   NEW_LOG
WHERE
   NEW_LOG.DT_Stamp BETWEEN @rptFromDateTime AND @rptToDateTime
GROUP BY
   (DateDiff(minute, 0, NEW_LOG.[DT_Stamp]) / 15)
ORDER BY Timestamp;

这有效,但 15 分钟的时间戳间隔总是从 0 开始,如:

|TimeStamp|Tasks|VAL1|VAL2|
|---------|-----|----|----|
|11:00:30 |40   | 12 |16  |
|11:15:30 |40   | 26 | 24 |

只需计算相对于您想要的起点的 DATEADD()DATEDIFF()@rptFromDateTime 而不是 0.

DATEADD(
  MINUTE,
  DATEDIFF(
    MINUTE,
    @rptFromDateTime,
    NEW_LOG.[DT_Stamp]
  )
  / 15
  * 15,
  @rptFromDateTime 
)

演示:https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=337f11d90e4b774b9b1d7a7dfd8b28f0