SQL 改写求助
来求助:想把下面的子查询改为连接方式写法
/*CREATE TABLE 库存(货号 INT, 数量 INT, 入库日期 INT, 出库日期 INT)
INSERT 库存
select '1', '1', '20130701', ' 20130710' union all
select '1', '2', '20130702', ' 20130704' union all
select '1', '3', '20130703', ' 20130708' union all
select '1', '4', '20130705', ' 20130706' union all
select '2', '1', '20130701', ' 20130703' union all
select '2', '2', '20130702', ' 20130705' union all
select '2', '3', '20130703', ' 20130704'
SELECT * FROM 库存
--数据表格*/
SELECT 货号,MAX(数量) 历史最大库存
FROM(
select 货号 ,入库日期, 数量=(select sum(c.数量)
from 库存 c
where c.入库日期<=m.入库日期 and c.出库日期>=m.入库日期 and c.货号=m.货号
)
from 库存 m) T
GROUP BY 货号
/*
CREATE TABLE 库存(货号 INT, 数量 INT, 入库日期 INT, 出库日期 INT)
INSERT 库存
select '1', '1', '20130701', ' 20130710' union all
select '1', '2', '20130702', ' 20130704' union all
select '1', '3', '20130703', ' 20130708' union all
select '1', '4', '20130705', ' 20130706' union all
select '2', '1', '20130701', ' 20130703' union all
select '2', '2', '20130702', ' 20130705' union all
select '2', '3', '20130703', ' 20130704'
SELECT * FROM 库存
--数据表格
*/
select 货号,max(数量) as 数量
from
(
select 货号,数量=isnull((select sum(数量) from 库存 a where t.货号=a.货号 and a.入库日期<=t.入库日期),0)
-isnull((select sum(数量) from 库存 b where t.货号=b.货号 and b.出库日期<=t.入库日期),0)
from 库存 t
)tb
group by 货号
/*
货号 数量
18
25
*/
select 货号,max(t.数量) '历史最大库存'
from 库存 m
cross apply
(select sum(c.数量) '数量' from 库存 c
where c.入库日期<=m.入库日期 and c.出库日期>=m.入库日期 and c.货号=m.货号) t
group by 货号
SELECT 货号,历史最大库存=MAX(数量) FROM
(
SELECT
a.货号,
a.入库日期,
数量=SUM(b.数量)
FROM 库存 a
INNER JOIN 库存 b
ON a.货号 = b.货号
AND b.入库日期 <= a.入库日期
AND b.出库日期 >= a.入库日期
GROUP BY a.货号, a.入库日期
) T
GROUP BY 货号
/*
货号历史最大库存
18
26
*/