一周特定时间部分的数据总和 - MS SQL 查询
Sum of data from a Specific Hour part for a Week - MS SQL Query
为了找到一周但下午 6 点到凌晨 12 点之间的特定时间的数据总和(在我的例子中是 CallsAnswered),我有以下一组查询,但它跳过了一天的数据在我的示例数据中。您能否验证我的查询并帮助我找到我遗漏的地方?
创建查询:
Create Table tblSingleBox (ScanDate DateTime, SkillTargetID Varchar(10), CallsAnswered int)
插入查询
Insert into tblSingleBox
Values ('2018-02-18 19:17:01', '10888', 32),
('2018-02-18 23:59:59', '10888', 01),
('2018-02-19 00:10:01', '10888', 15),
('2018-02-19 17:59:59', '10889', 12),
('2018-02-19 20:59:59', '10889', 90),
('2018-02-25 21:59:59', '10889', 40)
查询:
SELECT convert(varchar(10),ScanDate,101)ScanDate,SkillTargetID, SUM(CallsAnswered)CallsAnswered
FROM tblSingleBox (nolock)
WHERE DATEPART(Hour, scandate) between 18 and 24
and (scandate between '2018-02-18' and '2018-02-25')
GROUP BY convert(varchar(10),ScanDate,101) ,SkillTargetID
order by convert(varchar(10),ScanDate,101)
预期输出:
ScanDate SkillTargetID CallsAnswered
18-02-2018 10888 33
18-02-2018 10889 11
19-02-2018 10889 90
25-02-2018 10889 40
我得到的实际输出:
ScanDate SkillTargetID CallsAnswered
02/18/2018 10888 33
02/18/2018 10889 11
02/19/2018 10889 90
scandate
有时间并且 2018-02-25 21:59:59
大于 2018-02-25
(与 DATETIME 相比被视为 2018-02-25 00:00:00
)。
所以将scandate
转换为DATE
(截止时间)或更改
scandate between '2018-02-18' and '2018-02-25'
到
scandate >= '2018-02-18' and scandate < '2018-02-26'
为了找到一周但下午 6 点到凌晨 12 点之间的特定时间的数据总和(在我的例子中是 CallsAnswered),我有以下一组查询,但它跳过了一天的数据在我的示例数据中。您能否验证我的查询并帮助我找到我遗漏的地方?
创建查询:
Create Table tblSingleBox (ScanDate DateTime, SkillTargetID Varchar(10), CallsAnswered int)
插入查询
Insert into tblSingleBox
Values ('2018-02-18 19:17:01', '10888', 32),
('2018-02-18 23:59:59', '10888', 01),
('2018-02-19 00:10:01', '10888', 15),
('2018-02-19 17:59:59', '10889', 12),
('2018-02-19 20:59:59', '10889', 90),
('2018-02-25 21:59:59', '10889', 40)
查询:
SELECT convert(varchar(10),ScanDate,101)ScanDate,SkillTargetID, SUM(CallsAnswered)CallsAnswered
FROM tblSingleBox (nolock)
WHERE DATEPART(Hour, scandate) between 18 and 24
and (scandate between '2018-02-18' and '2018-02-25')
GROUP BY convert(varchar(10),ScanDate,101) ,SkillTargetID
order by convert(varchar(10),ScanDate,101)
预期输出:
ScanDate SkillTargetID CallsAnswered
18-02-2018 10888 33
18-02-2018 10889 11
19-02-2018 10889 90
25-02-2018 10889 40
我得到的实际输出:
ScanDate SkillTargetID CallsAnswered
02/18/2018 10888 33
02/18/2018 10889 11
02/19/2018 10889 90
scandate
有时间并且 2018-02-25 21:59:59
大于 2018-02-25
(与 DATETIME 相比被视为 2018-02-25 00:00:00
)。
所以将scandate
转换为DATE
(截止时间)或更改
scandate between '2018-02-18' and '2018-02-25'
到
scandate >= '2018-02-18' and scandate < '2018-02-26'