按日计算的库存产品数量

时间:2014-01-08 16:47:34

标签: sql oracle

我有一个活跃的工作日列表:

--------------
|    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 个答案:

答案 0 :(得分: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