如何統計每個小時使用者線上人數?,統計使用者線上人數
系統有一個表記錄使用者登入、登出的日誌,現在以一個小時為段,統計出線上人數,這是一個數學問題。
情況1:
|___________一個小時____________|
<=登入時間 登出時間<=
情況2:
|___________一個小時____________|
登入時間 < < 登出時間
情況3:
|___________一個小時____________|
登入時間 <= 登出時間<=
情況4:
|___________一個小時____________|
<=登入時間 < 登出時間
with dd as( --類比出24個小時時段
SELECT (trunc(to_date('2015-02-09', 'yyyy-mm-dd')) + (LEVEL - 1) / 24) one_hour_1,
(trunc(to_date('2015-02-09', 'yyyy-mm-dd')) + LEVEL / 24) one_hour_2
FROM dual
CONNECT BY LEVEL <= 24
)
SELECT dd.one_hour_1, COUNT(1)
FROM log_user_login d,
dd
WHERE (d.login_time >= dd.one_hour_1 AND d.exit_time <= dd.one_hour_2)
OR (d.login_time < dd.one_hour_1 AND d.exit_time BETWEEN dd.one_hour_1 AND dd.one_hour_2)
OR (d.login_time BETWEEN dd.one_hour_1 AND dd.one_hour_2 AND d.exit_time > dd.one_hour_2)
OR (d.login_time < dd.one_hour_1 AND d.exit_time > dd.one_hour_2)
GROUP BY dd.one_hour_1
ORDER BY dd.one_hour_1;