我有一个活跃的工作日列表:
--------------
| 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 ...
答案 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