我正在寫一個SQLite數據庫的基於統計的應用程序。有一個表記錄用戶何時登錄和註銷(SessionStart,SessionEnd日期時間)。SQL查詢:如果給定兩個DateTime時間戳,如何確定「在N小時內看到」?
我在找的是一個查詢,它可以顯示用戶已有已登錄的時間,以線形圖的方式進行登錄 - 所以在12:00到凌晨1:00之間,有60個用戶登錄(在任何時間點),凌晨1點到凌晨2點之間有54個用戶登錄,等等......
而且我希望能夠運行這個SUM,這就是爲什麼我無法將這些記錄帶入.NET,並以這種方式遍歷它們。
我已經想出了一個相當原始的方法,每天每個小時都有一個子查詢,但是這種方法已被證明是緩慢和緩慢的。我需要能夠計算這個的一對夫婦十萬條記錄在一瞬間..
SELECT
case
when (strftime('%s',datetime(date(sessionstart), '+0 hours')) > strftime('%s',sessionstart)
AND strftime('%s',datetime(date(sessionstart), '+0 hours')) < strftime('%s',sessionend))
OR (strftime('%s',datetime(date(sessionstart), '+1 hours')) > strftime('%s',sessionstart)
AND strftime('%s',datetime(date(sessionstart), '+1 hours')) < strftime('%s',sessionend))
OR (strftime('%s',datetime(date(sessionstart), '+0 hours')) < strftime('%s',sessionstart)
AND strftime('%s',datetime(date(sessionstart), '+1 hours')) > strftime('%s',sessionend))
then 1 else 0 end as hour_zero,
... hour_one,
... hour_two,
........ hour_twentythree
FROM UserSession
我想知道什麼更好的方式來確定兩個DateTime是否已經看到durring特定小時(最好的情況下,如果它在多個天內登錄,但是沒有必要,它多少次超過一小時)?
我唯一的想法是有一個特定於此的「小時」表,並且只是計算用戶在運行時看到的小時數,但我覺得這比以前的SQL更像黑客攻擊。
任何幫助將不勝感激!
你不關心DATE部分嗎?您是否需要爲整個歷史記錄,某個日期範圍或每一天的每個小時分別彙總? – van 2010-03-18 20:05:43
切割日期部分的唯一問題是有些用戶可能會登錄超過一天,所以最好的情況是能夠在25小時的會話期間考慮額外的小時。 我會聚合每個小時爲一個特定的用戶,或另一個標識符在桌子上。儘管如此,這可能包括數十萬次會議。 – efess 2010-03-19 13:26:03