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.货号
这样仅仅能实现部分功能:历史最高库存恰恰是最后入库日期当天。
求各位指点赐教!