簡體   English   中英

如何選擇按一天中的小時分組的記錄,包括沒有記錄的小時

[英]How to select records grouped by the hour of the day including hours that have no records

我在Oracle數據庫中有一個表,其中包含用戶在我們的系統之一中執行的操作。 它用於統計分析,我需要顯示在給定日期執行的操作數,並按一天中的小時進行分組。

我有一個很好的查詢,但是,它不顯示不包含任何操作的一天中的小時(顯然是因為該小時沒有要顯示的記錄)。

例如,查詢:

SELECT TO_CHAR(event_date, 'HH24') AS during_hour,
  COUNT(*)
FROM user_activity
WHERE event_date BETWEEN to_date('15-JUN-2010 14:00:00', 'DD-MON-YYYY HH24:MI:SS') 
    AND to_date('16-JUN-2010 13:59:59', 'DD-MON-YYYY HH24:MI:SS')
AND event = 'user.login'
GROUP BY TO_CHAR(event_date, 'HH24')
ORDER BY during_hour;

(不要注意奇數的開始和結束日期,它們之所以這樣,是因為它們在格林尼治標准時間(GMT),而我是GMT + 10,但這是一個單獨的問題,除非它影響回答此問題的能力)

這將產生以下結果集:

DURING_HOUR            COUNT(*)               
---------------------- ---------------------- 
00                     12                     
01                     30                     
02                     18                     
03                     20                     
04                     12                     
05                     24                     
06                     20                     
07                     4                      
23                     8                      

9 rows selected

如何修改該查詢以顯示一天中包含0個事件的小時?

我搜索了Stack Overflow,發現了一些類似的問題,但並不能回答我的特定問題。

感謝您的協助。

SELECT h.hrs, NVL(Quantity, 0) Quantity
FROM (SELECT TRIM(to_char(LEVEL - 1, '00')) hrs
       FROM dual
       CONNECT BY LEVEL < 25) h
LEFT JOIN (SELECT TO_CHAR(event_date, 'HH24') AS during_hour,
                  COUNT(*) Quantity
           FROM user_activity u
           WHERE event_date BETWEEN
                 to_date('15-JUN-2010 14:00:00', 'DD-MON-YYYY HH24:MI:SS') AND
                 to_date('16-JUN-2010 13:59:59', 'DD-MON-YYYY HH24:MI:SS')
           AND event = 'user.login'
           GROUP BY TO_CHAR(event_date, 'HH24')) t
ON (h.hrs = t.during_hour)
ORDER BY h.hrs;

一種選擇是創建一個包含24行的單獨表:00-> 23。

然后外部加入反對。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM