SQL Count数据从晚上10点到凌晨2点(第二天)

时间:2013-10-16 11:17:17

标签: sql

如果这是正确的话,如果我想计算从我的房屋登录我的房屋的人数,我很难过。 2013年10月16日2013年10月10日至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

提前致谢

2 个答案:

答案 0 :(得分: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退出

答案 1 :(得分:0)

除了上一个答案,我使用CAST收集的内容应该在这里工作:

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