2014-01-08 73 views
1

算我的活躍工作日內列表:存貨產品由

-------------- 
| DATE | 
-------------- 
| 01/06/2014 | 
| 01/07/2014 | 
| ...  | 
-------------- 

而且我有一個龐大的產品列表:

---------------------------------- 
| Name | Received | Sold | 
---------------------------------- 
| Jam | 01/04/2014 |   | 
| Honey | 01/04/2014 | 01/07/2014| 
---------------------------------- 

我希望能夠計數在每個工作日之前或之後收到但未在同一工作日內銷售的庫存產品數量(一旦某個產品在某個日期銷售,則不應再計入未來日期)。

因此,對於簡單的例子以上結果會是什麼樣子:

------------------------ 
| DATE | Count | 
------------------------ 
| 01/06/2014 | 2 | // 2 products received on 01/04/2014, none sold by 01/06 
| 01/07/2014 | 1 | // 2 products received on 01/04, but 1 sold on 01/07 
| ...  | ... | 
------------------------ 

我試着做一個循環在DATE但我認爲會要求我插入一個表格,我正在努力避免。

我也不認爲我可以做一個簡單的GROUP BY

是否有一個清潔和優雅的解決方案,這使用分區或Oracle的東西? (我對Oracle還不是非常熟悉)。這也被限制到Oracle 10.g ...

回答

1

嘗試工作日和產品表之間的簡單連接

select w.work_date, count(p.name) 
from workdays as w 
join products as p 
    on p.received < w.work_date and (p.sold is null or p.sold > w.work_date) 
group by w.work_date 
+0

但將這個查詢工作,如果更多的日期被添加到工作日和更多的項目加入到產品? 'p.received San

+0

要求是「能夠計算每個工作日之前收到但未在同一工作日內出售的庫存產品數量。」在兩個工作日中的任何一個工作日之前收到新產品「butter,01/03/2014,null」,並且在那些日期沒有銷售。所以自然計數應該增加兩個,對嗎? – z33m

+0

@ z33m - 沒錯。黃油在售出後的任何日子都不應該算在內。 –