2015-12-07 26 views
0

我的目標是生成這樣的表中存在的每分鐘計數的所有記錄。在指定的時間限制內爲每天生成每分鐘字符串

SELECT 
    COUNT(*) as RECORD_COUNT, 
    to_Char(MY_DATE,'HH24:MI') MINUTE_GAP 
FROM 
    TABLE_A 
WHERE 
    BLAH='Blah! Blah!!' 
GROUP BY 
    to_Char(MY_DATE,'HH24:MI') 

但是,此查詢不給我沒有結果的分鐘。

爲了獲得所需的結果,我將通過在這兩個結果之間進行JOIN來使用以下查詢來填充原始查詢中的空白。

SELECT 
    * 
FROM 
    ( SELECT 
      TO_CHAR(TRUNC(SYSDATE)+((ROWNUM-1) /1440) ,'HH24:MI') as MINUTE_GAP, 
      0 as COUNT 
     FROM 
      SOME_LARGE_TABLE_B 
     WHERE 
      rownum<=1440 
    ) 
WHERE 
    minute_gap>'07:00' /*I want only the data starting from 7:00AM*/ 

這對我的作品,但

  1. 我不能依靠SOME_LARGE_TABLE_B生成分鐘 ,因爲它可能會在某個時候在今後
  2. 沒有記錄查詢沒有按看起來不像專業解決方案。

有沒有更簡單的方法來做到這一點?

注意:我不希望爲一個查詢使用靜態值爲所有分鐘創建任何新表。

回答

2

剛剛生成的時間戳和左加入您的分組數據,將其:

SELECT MINUTE, .... 
FROM (
    SELECT TO_CHAR(TO_DATE((LEVEL + 419) * 60, 'SSSSS'), 'HH24:MI') MINUTE /* 07:00 - 23:59 */ FROM DUAL CONNECT BY LEVEL <= 1020) 
    LEFT JOIN (
     <your grouped subquery> 
    ) ON MINUTE = MINUTE_GAP 
+0

Brillient ...... –

+0

從來不知道的CONNECT BY LEVEL啄....感謝很多 –

+0

你可以使用具有相同結果的遞歸子查詢,但在這種情況下,連接方式更簡潔。 – Husqvik