Here is the Window function version Jeff mentioned
😎
SELECT
M.ORDERNO
,ROW_NUMBER() OVER
(
PARTITION BY M.ORDERNO
ORDER BY M.LASTUPDATEDDATE ASC
) AS ORDERNO_RID
,M.LASTUPDATEDDATE
,M.ORDERCLIENTINITIALFEE
,M.CLIENTINITFEE
,M.INITIALVENDORFEE
,M.VENDORFEE
,CASE
WHEN (LAG(M.VENDORFEE,1,0) OVER
(
PARTITION BY M.ORDERNO
ORDER BY M.LASTUPDATEDDATE ASC
)) = 0 THEN (M.VENDORFEE - M.INITIALVENDORFEE)
ELSE M.VENDORFEE - (LAG(M.VENDORFEE,1,0) OVER
(
PARTITION BY M.ORDERNO
ORDER BY M.LASTUPDATEDDATE ASC
))
END AS OUTPUT1
FROM dbo.MAIN M;
Results
ORDERNO ORDERNO_RID LASTUPDATEDDATE ORDERCLIENTINITIALFEE CLIENTINITFEE INITIALVENDORFEE VENDORFEE OUTPUT1
-------- ------------ --------------- ---------------------- -------------- ----------------- ---------- -------
1000 1 2014-01-01 3000 1000 700 1500 800
1000 2 2014-03-05 1000 2000 650 200 -1300
1000 3 2014-05-10 500 5000 375 125 -75
1000 4 2014-08-20 100 3500 675 1300 1175
1000 5 2014-11-20 100 2000 400 300 -1000
2000 1 2014-03-10 100 2000 375 125 -250
2000 2 2014-04-27 300 2000 675 1300 1175
2000 3 2014-09-20 200 2000 400 300 -1000
3000 1 2014-03-17 100 100 375 110 -265
3000 2 2014-03-22 500 200 450 380 270
4000 1 2014-01-01 300 400 500 600 100
5000 1 2014-01-01 100 250 375 750 375
6000 1 2014-04-23 300 300 120 190 70