2013-05-14 103 views
2

我想稍微改進這個問題,因爲我上次沒有真正問過。我基本上在做這個查詢:如何統計某個範圍內的每一天的記錄(包括沒有記錄的天數)

Select count(orders) 
From Orders_Table 
Where Order_Open_Date<=To_Date('##/##/####','MM/DD/YYYY') 
and Order_Close_Date>=To_Date('##/##/####','MM/DD/YYYY') 

其中##/##/####是同一天。實質上,這個查詢旨在查找任何給定日期的「開放」訂單的數量。唯一的問題是我想要在一年或更長時間內每天這樣做。我想,如果我知道如何將##/##/####定義爲一個變量,然後通過該變量對計數進行分組,那麼我可以使這個工作,但我不知道該怎麼做 - 或者在那裏也可能是另一種方式。我目前在SQL開發人員上使用Oracle SQL。感謝您的任何意見。

+0

你想用pl/sql來實現這個嗎?或者你想堅持sql? – Lokesh 2013-05-14 03:27:52

+0

你的問題是什麼?如何將'##/##/####'轉換爲變量或者smth。其他? – Art 2013-05-14 13:32:45

回答

0

你可以使用這樣「行發生器」技術(編輯爲Hogan的意見)

Select RG.Day, 
     count(orders) 
From Orders_Table, 
     (SELECT trunc(SYSDATE) - ROWNUM as Day 
     FROM (SELECT 1 dummy FROM dual) 
     CONNECT BY LEVEL <= 365 
    ) RG 
Where RG.Day    <=To_Date('##/##/####','MM/DD/YYYY') 
    and RG.Day    >=To_Date('##/##/####','MM/DD/YYYY') 
    and Order_Open_Date(+) <= RG.Day 
    and Order_Close_Date(+) >= RG.Day - 1 
Group by RG.Day 
Order by RG.Day 

這應該列出上一年的每一天與相應的訂單數量

+0

您不需要子查詢,只需在查詢中使用connect by級別,但是這並不顯示如何將開始和結束日期指定爲參數 – Hogan 2013-05-14 10:22:21

0

比方說,你有沒有和列ADATE

aDate 
1/1/2012 
1/2/2012 
1/3/2012 

現在你加入,爲你的餐桌

Select * 
From Orders_Table 
join datelist on Order_Open_Date<=adate and Order_Close_Date>=adate 

這給你所有你關心的訂單列表,現在的表datelist你分組和計數

Select aDate, count(*) 
From Orders_Table 
join datelist on Order_Open_Date<=adate and Order_Close_Date>=adate 
group by adate 

如果你想傳遞一個參數,然後只是生成日期與復發香港專業教育學院CTE

with datelist as 
(
    select @startdate as adate 
    UNION ALL 
    select adate + 1 
    from datelist 
    where (adate + 1) <= @lastdate 
) 
Select aDate, count(*) 
From Orders_Table 
join datelist on Order_Open_Date<=adate and Order_Close_Date>=adate 
group by adate 

注:我沒有一個Oracle數據庫來測試,所以我可能有一些語法錯誤的這個平臺,但你的想法。

NOTE2:如果你想什麼都沒有用它作爲你的SELECT語句0那些列出的所有日期:

Select aDate, count(Order_Open_Date) 
From Orders_Table 
left join datelist on Order_Open_Date<=adate and Order_Close_Date>=adate 
group by adate 
-1

如果您只想有一天,你可以查詢使用TRUNC這樣

select count(orders) 
From orders_table 
where trunc(order_open_date) = to_date('14/05/2012','dd/mm/yyyy') 
+0

我不認爲那匹配;原始查詢具有'和'對不同的字段,它不限制該字段到那個日期。 – 2013-05-14 06:39:09

相關問題