日期:2014-05-17  浏览次数:20595 次

SQL查询求助-历史最大库存问题
本帖最后由 uu3131313131 于 2013-08-06 15:22:55 编辑
小小新人一枚,下面这道题目想而来好久也没能做出来,特地来向各位求教,请各位大大们不吝赐教:

数据表格名称:库存
货号   数量     入库日期        出库日期
————————————————————
1       1       20130701        20130710
1       2       20130702        20130704
1       3       20130703        20130708
1       4       20130705        20130706
2       1       20130701        20130703
2       2       20130702        20130705
2       3       20130703        20130704

要求:写出一条SQL语句,返回货号,历史最大库存。

【下方是自己的理解,若您已经理解题意可以跳过】
个人解读:
1.数据解读:就第一行数据来说:一个货物20130701进库,20130710出库,依次类推;历史最大库存,即这些日期中最大有库存的一天。
这里有一个绕人的地方:举例1:仓库一天进1个货物,出一个货物,那么今天最高库存是?答:1个。
举例2:仓库一天上午进4个,下午出2个,历史最高库存是?答:2个。
2.具体方法分析:【若同一天有进有出,默认为先进后出】
入库是增加库存的,所以历史最高库存只产生于有入库的那天,因此可以分为2步解决问题:
(1)求出有入库的每天最高库存
(2)所有有入库的最高库存求MAX

呃。。。本人的思路想计算出每一天的历史最高库存,当天库存+之前的累计库存-该天之前的所有出库数量

然后奋斗了N久,只能写成这样:
SELECT T4.货号,T4.总入库-T3.总出库 历史最高库存
FROM
(
SELECT *
FROM
(
SELECT T.货号,SUM(T.入库数量) 总入库
FROM
(
select 入库日期,货号,sum(数量) 入库数量
from 库存
group by 入库日期,货号
) T
GROUP BY T.货号
) T2
) T4

JOIN

(
SELECT T1.货号,SUM(T1.出库数量) 总出库
FROM
(
select 出库日期,货号,sum(数量) 出库数量
from 库存
WHERE 出库日期<(SELECT MAX(入库日期) FROM 库存)
group by 出库日期,货号
) T1
GROUP BY T1.货号
) T3

ON T4.货号=T3.货号

这样仅仅能实现部分功能:历史最高库存恰恰是最后入库日期当天。

求各位指点赐教!
SQL select