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
我正在尝试获取 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