2014-01-08 46 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 - 没错。黄油在售出后的任何日子都不应该算在内。 –