2013-06-05 37 views
-1

我有以下表routes及其有效期和到期日。如何查找單個sql查詢中給定時間段內每一天的記錄數?

r_no name eff_date exp_date 
1 test1 01-jun-2013 INF 
2 test2 10-jun-2013 15-jun-2013 
3 test3 01-jan-2013 25-jun-2013 
4 test4 01-feb-2013 31-dec-2013 

輸入將由用戶說了EG給出:01君2013年30月,2013`

我需要得到每個每天的路線和計數整個時期。

Date Routes_Count 
01-Jun-2013 3 
02-Jun-2013 3 
. 
. 
10-Jun-2013 4 
. 
. 
20-Jun-2013 3 
. 
. 
30-Jun-2013 2 

有人可以幫助我在Oracle 11g中使用單個查詢來獲得上述結果嗎?

回答

1

你能做到這樣,

WITH cte AS 
    (SELECT  TO_DATE ('01-jun-2013', 'dd-mon-yyyy') + LEVEL - 1 dte 
     FROM DUAL 
     CONNECT BY LEVEL <= 
         TO_DATE ('30-jun-2013', 'dd-mon-yyyy') + 1 
        - TO_DATE ('01-jun-2013', 'dd-mon-yyyy')) 
SELECT cte.dte, COUNT (1) 
    FROM cte, routes 
    WHERE cte.dte BETWEEN NVL (routes.eff_date, '01-jan-0001') 
       AND NVL (routes.exp_date, '31-dec-4000') 
GROUP BY cte.dte 
ORDER BY 1; 

sql fiddle

這裏cte是我所生成的臨時表,這給所有的日期從6月1日至三十○日6月加入你的routes表,以便日期在路線的生效日期和到期日期之內。請注意,如果沒有exp_date或eff_date,那麼我將它替換爲過去未來或過去太遠的日期。現在你已經獲得了每個日期的所有路線,按照日期分組,以獲得計數。

+0

感謝您的回答。我錯誤地點擊了未被接受的按鈕。這工作非常好。 –

相關問題