34,594
社区成员
发帖
与我相关
我的任务
分享
SELECT ID,WAGE,CASE WHEN XH=1 THEN WAGE
ELSE (SELECT WAGE FROM (SELECT ROW_NUMBER()OVER (PARTITION BY ID ORDER BY WAGETIME) AS XH,* FROM tb) B WHERE XH=1 AND A.ID=B.ID)-(SELECT SUM(C.WAGE) FROM (SELECT ROW_NUMBER()OVER (PARTITION BY ID ORDER BY WAGETIME) AS XH,* FROM tb) C WHERE C.XH<>1 AND C.XH<=A.XH AND C.ID=A.ID) END AS WAGE1,WAGETIME
FROM (SELECT ROW_NUMBER()OVER (PARTITION BY ID ORDER BY WAGETIME) AS XH,* FROM tb) A
with tb(Id,wage,wagetime)as(
select 'A',3000,'2014-07-08' union
select 'A',300,'2014-08-08' union
select 'A',200,'2014-09-08' union
select 'B',3100,'2014-07-08' union
select 'B',310,'2014-08-08' union
select 'B',200,'2014-09-08' union
select 'C',3200,'2014-07-08' union
select 'C',320,'2014-08-08' union
select 'D',3300,'2014-07-08' union
select 'D',330,'2014-08-08' union
select 'E',3400,'2014-07-08' union
select 'E',340,'2014-08-08')
,TC AS(
SELECT *,CASE WHEN WAGETIME!=(SELECT MIN(WAGETIME) FROM tb WHERE A.Id=ID)
THEN wage*-1 ELSE wage END NEW FROM TB A
)
SELECT ID,wage,(SELECT SUM(NEW) FROM TC WHERE A.wagetime>=wagetime AND A.Id=ID)WAGE1,wagetime
FROM TC A
ORDER BY ID,3 DESC