我有一个查询,它是过去24小时或记录并对其进行计数,然后按ID对记录进行分组。
我想要的是选择过去的24小时加上当天的前8小时
SELECT controllerID,
DATEPART (HOUR, dateadd(hour, datediff(hour, 0, dtReading), 0)) as TimeStampHour,
Count(*) As Count
FROM [ReaderData]
WHERE dtReading >= dateadd(day,datediff(day,1,GETDATE()),0)
AND dtReading < dateadd(day,datediff(day,0,GETDATE()),0)
AND (EventType = '(0x03)Door state low')
AND CardID = 'fffffff0'
GROUP BY controllerID, dateadd(hour, datediff(hour, 0, dtReading), 0)
ORDER BY controllerID, dateadd(hour, datediff(hour, 0, dtReading), 0);
现在我可以通过更改where条件中的-1和0来更改日期,以更改日期。目前这个查询产生这样的结果
controllerID TimeStampHour Count
13 0 129
13 1 114
13 2 104
13 3 96
13 4 111
13 5 114
13 6 97
13 7 116
13 8 62
13 9 82
13 11 62
13 12 112
13 13 78
13 14 20
13 15 11
13 16 116
13 17 122
13 18 106
13 19 126
13 20 125
13 21 105
13 22 122
13 23 16
28 10 12
28 16 8
30 0 162
30 1 161
30 2 161
30 3 62
30 4 61
30 5 62
正如您所看到的,控制器ID每小时都有一个计数
我想要的是将时间延长8小时到第二天 例如,在控制器ID 13的第23个小时之后,TimeStampHour将为0,但这将是已经选择的日期之后的第二天
答案 0 :(得分:1)
似乎你需要更换
dtReading >= dateadd(day,datediff(day,1,GETDATE()),0)
AND dtReading < dateadd(day,datediff(day,0,GETDATE()),0)
带
dtReading between dateadd(day,datediff(day,1,GETDATE()),0) AND dateadd(hour,8,dateadd(day,datediff(day,0,GETDATE()),0))
答案 1 :(得分:0)
尝试这样,它几乎与@Dmitry Polyakov相似
SELECT controllerID,
Datepart (HOUR, Dateadd(hour, Datediff(hour, 0, dtReading), 0)) AS TimeStampHour,
Count(*) AS Count
FROM [ReaderData]
WHERE dtReading >= Dateadd(day, Datediff(day, 1, Getdate()), 0)
AND dtReading < Dateadd(hour, 8, Dateadd(day, Datediff(day, 0, Getdate()), 0))
AND ( EventType = '(0x03)Door state low' )
AND CardID = 'fffffff0'
GROUP BY controllerID,
Dateadd(hour, Datediff(hour, 0, dtReading), 0)
ORDER BY controllerID,
Dateadd(hour, Datediff(hour, 0, dtReading), 0);