34,576
社区成员
发帖
与我相关
我的任务
分享
WITH a(ID,InQ,OutQ , sQ) AS (
select 3,1 , 0 ,291 UNION
select 2 ,0 ,10, 290 UNION
select 1, 300, 0 , 300
)
SELECT ID,a.InQ,a.OutQ,a.sQ,isnull(b.LastQ,0)+Inq-OutQ AS sQ_Cal,b.lid FROM a
OUTER APPLY (SELECT TOP 1 la.id, la.sQ FROM a AS la WHERE la.id<a.ID ORDER BY id desc) b(lid,LastQ) —上一次
ORDER BY a.ID DESC
/*
ID InQ OutQ sQ sQ_Cal lid
3 1 0 291 291 2
2 0 10 290 290 1
1 300 0 300 300 NULL
*/
with a(id,inq,qutq) as (
select 3,1,0 union all
select 2,0,10 union all
select 1,300,0)
select *,(select sum(b.inq-b.qutq) from a as b where a.id>=b.id) as sq from a
/**
id inq qutq sq
3 1 0 291
2 0 10 290
1 300 0 300
**/