0

如果我想计算从例如 2013 年 10 月 16 日晚上 10 点到 2013 年 10 月 17 日凌晨 2 点期间登录我的场所的人数,我很困惑这是否正确。

我的结果看起来很好,我只是想问这是正确的方法还是我会在上午 12 点遗漏一些数据?

SELECT COUNT (SignInLog.PlayerID) as '10pm-230am'
FROM SignInLog inner join Members
ON 
Members.ID = SignInLog.PlayerID and
SignIn >= '2013-09-01' and
SignOut <= '2013-10-01' and
DATEPART(hh, SignIn) >= 22 and 
DATEPART(hh, SignOut) <= 3 
and KioskID=1
and Members.MemberCategory Between 1 and 13

提前致谢

4

2 回答 2

0

看来你的日期搞砸了,你已经交换了月份和日期。这不是正确的方法,由于 datepart 的计算,你的表现会很糟糕,试试这个:

SELECT COUNT (SignInLog.PlayerID) as '10pm-230am'
FROM SignInLog inner join Members
ON 
Members.ID = SignInLog.PlayerID and
SignOut >= '2013-10-16T22:00:00' and
SignIn  <= '2013-10-17T02:00:00' and -- changed it according to question
KioskID=1 and
Members.MemberCategory Between 1 and 13

注意:阅读@Adrianms 评论后,我改变了答案。现在,如果人们有任何重叠,查询会找到它。想象一个人在 2013-10-16 15:00 登录和/或在 2013-10-17 04:00 注销

于 2013-10-16T11:22:45.863 回答
0

除了前面的答案,从我收集的使用 aCAST应该在这里工作:

SELECT COUNT (SignInLog.PlayerID) as '10pm-230am'
FROM SignInLog inner join Members
ON 
Members.ID = SignInLog.PlayerID and
SignIn >= CAST('2013-09-01 22:00:00' AS DATETIMEOFFSET) and
SignOut <= CAST('2013-10-01 03:00:00' AS DATETIMEOFFSET) and
and KioskID=1
and Members.MemberCategory Between 1 and 13
于 2013-10-16T11:24:42.660 回答