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 に答える