sql server对数据进行先进先出

--> 测试数据:[m]
if object_id('[m]') is not null drop table [m]
go 
Create table m ( ID int not NULL , mCount int not NULL ,mTime datetime not null) 
INSERT into m(ID,mCount,mTime) 
SELECT 1,50,'2014-02-01' UNION ALL
SELECT 1,60,'2014-02-02' UNION ALL
SELECT 2,50,'2014-02-01' UNION ALL
SELECT 2,60,'2014-02-03' UNION ALL
SELECT 2,60,'2014-02-04' UNION ALL
SELECT 2,40,'2014-02-02' UNION ALL
SELECT 1,70,'2014-02-03' UNION ALL
SELECT 1,80,'2014-02-04' 
 
select * from m
/*
ID          mCount      mTime
----------- ----------- -----------------------
1           50          2014-02-01 00:00:00.000
1           60          2014-02-02 00:00:00.000
2           50          2014-02-01 00:00:00.000
2           60          2014-02-03 00:00:00.000
2           60          2014-02-04 00:00:00.000
2           40          2014-02-02 00:00:00.000
1           70          2014-02-03 00:00:00.000
1           80          2014-02-04 00:00:00.000
(8 行受影响)
*/
 
declare @i int 
set @i =80  --定义出货总数量
select a.id,a.mcount ,a.mtime,
case when a.mcount-(a.tmcount-@i) <0 then 0  when a.tmcount<@i then a.mcount else a.mcount-(a.tmcount-@i)end as '出货数量' 
from
(
select a.*,sum(isnull(b.mcount,0)) as Tmcount from m a left join m b on a.mtime>=b.mtime and a.id=b.id
group by a.id,a.mcount,a.mtime
)a 
/*
id          mcount      mtime                   出货数量
----------- ----------- ----------------------- -----------
1           50          2014-02-01 00:00:00.000 50
1           60          2014-02-02 00:00:00.000 30
1           70          2014-02-03 00:00:00.000 0
1           80          2014-02-04 00:00:00.000 0
2           40          2014-02-02 00:00:00.000 30
2           50          2014-02-01 00:00:00.000 50
2           60          2014-02-03 00:00:00.000 0
2           60          2014-02-04 00:00:00.000 0
(8 行受影响)

--------------------- 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值