Sql 按天计算库存产品数量
我有一个活动工作日列表:Sql 按天计算库存产品数量,sql,oracle,Sql,Oracle,我有一个活动工作日列表: -------------- | DATE | -------------- | 01/06/2014 | | 01/07/2014 | | ... | -------------- 我有一个庞大的产品清单: ---------------------------------- | Name | Received | Sold | ---------------------------------- | Jam | 01/
--------------
| 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
| ... | ... |
------------------------
我试着在日期上做一个循环,但我认为这需要我插入到一个表中,这是我试图避免的
我也不认为我能做一个简单的分组
在Oracle中是否有一个干净而优雅的解决方案来使用分区或其他东西?(我对甲骨文还不是很熟悉)。这也仅限于Oracle 10.g.尝试工作日和产品表之间的简单联接
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
选择w.work\u日期、计数(p.name)
从w工作日开始
以p的身份加入产品
在p.receivedw.work_日期)
按工作日期分组
但是,如果向工作日添加更多的日期,向产品添加更多的项目,此查询是否有效<代码>p.收到
条件将继续统计特定工作日之前收到的所有产品。例如,如果我在产品中再添加一个项目作为2014年3月1日的黄油,null,则2014年1月6日和2014年1月4日的计数将更改为2和3,这不是OP的要求。该要求是“能够计算每个工作日之前收到但在同一工作日未售出的库存产品数量。”2014年3月1日,新产品<代码>黄油,空<代码>在两个工作日之前收到,在这两个工作日没有出售。所以这两种情况下,计数自然都会增加,对吗?@z33m-没错。黄油在出售后的任何一天都不应计算在内。我认为将
条件更改为
应该会产生结果。我认为p.received
必须是