Hi Jingyang,
As much as the above solution is correct for the sample data I posted, the entire dataset is much larger.
When I applied you solution the rest of the dataset, it didnt work as well.
Here is a slightly larger sample data
declare @t table
(
ID int,
Patid char(10),
DrugID char(10),
DateVal char(10),
NextDate char(10),
Duration char(10),
qty char(10),
--FinishDate datetime,
Remaining int
)
insert @t
values
--ob ID PatId DrugID DateVal NextDate Duration qty Remaining cB lq
( 1 ,'Pat2', 'Drug1', '2012-10-25', '2013-02-28', '126 ', '120', -6 ) ,
( 2 ,'Pat2', 'Drug1', '2013-02-28', '2013-06-20', '112 ', '112', 0 ) ,
( 3 ,'Pat2', 'Drug1', '2013-06-20', '2013-10-08', '110 ', '120', 10 ) ,
( 4 ,'Pat2', 'Drug1', '2013-10-08', '2014-01-13', '97 ', '120 ', 23 ) ,
( 5 ,'Pat2', 'Drug1', '2014-01-13', '2014-01-28', '15 ', NULL, -15 ) ,
( 6 ,'Pat2', 'Drug1', '2014-01-28', '2014-02-03', '6 ', '120 ', 114 ) ,
( 7 ,'Pat2', 'Drug1', '2014-02-03', '2014-02-07', '4 ', '14 ', 10 ) ,
( 8 ,'Pat2', 'Drug1', '2014-02-07', '2014-08-12', '186 ', NULL, -186 ) ,
( 9 ,'Pat2', 'Drug1', '2014-08-12', '2014-12-02', '112 ', '120 ', 8 ) ,
( 10 ,'Pat2', 'Drug1', '2014-12-02', '2015-03-22', '110 ', '120 ', 10 ) ,
( 11 ,'Pat2', 'Drug1', '2015-03-22', '2015-03-26', '4 ', '14 ', 10 ) ,
( 12 ,'Pat2', 'Drug1', '2015-03-26', '2015-04-17', '22 ', '14 ', -8 ) ,
( 13 ,'Pat2', 'Drug1', '2015-04-17', NULL, NULL, '120 ', 120 ) ,
( 1 ,'Pat2', 'Drug2', '2011-02-02', '2011-02-04', '2 ', '1 ', -1 ) ,
( 2 ,'Pat2', 'Drug2', '2011-02-04', '2011-06-20', '136 ', NULL, -136 ) ,
( 3 ,'Pat2', 'Drug2', '2011-06-20', '2012-11-19', '518 ', NULL, -518 ) ,
( 4 ,'Pat2', 'Drug2', '2012-11-19', '2012-11-27', '8 ', '7 ', -1 ) ,
( 5 ,'Pat2', 'Drug2', '2012-11-27', '2014-01-10', '409 ', '90 ', -319 ) ,
( 6 ,'Pat2', 'Drug2', '2014-01-10', '2014-01-11', '1 ', '14 ', 13 ) ,
( 7 ,'Pat2', 'Drug2', '2014-01-11', '2014-02-03', '23 ', '14 ', -9 ) ,
( 8 ,'Pat2', 'Drug2', '2014-02-03', '2014-02-07', '4 ', '14 ', 10 ) ,
( 9 ,'Pat2', 'Drug2', '2014-02-07', '2015-03-21', '407 ', NULL, -407 ) ,
( 10 ,'Pat2', 'Drug2', '2015-03-21', '2015-03-22', '1 ', '14 ', 13 ) ,
( 11 ,'Pat2', 'Drug2', '2015-03-22', '2015-03-26', '4 ', '14 ', 10 ) ,
( 12 ,'Pat2', 'Drug2', '2015-03-26', NULL, NULL, '14 ', 14 ) ,
( 1 ,'Pat1', 'Drug3', '2012-06-27', '2012-08-08', '42 ', '60 ', 18 ) ,
( 2 ,'Pat1', 'Drug3', '2012-08-08', '2012-08-29', '21 ', NULL, -21 ) ,
( 3 ,'Pat1', 'Drug3', '2012-08-29', '2012-09-24', '26 ', '30 ', 4 ) ,
( 4 ,'Pat1', 'Drug3', '2012-09-24', '2012-12-02', '69 ', '60 ', -9 ) ,
( 5 ,'Pat1', 'Drug3', '2012-12-02', '2012-12-19', '17 ', '30 ', 13 ) ,
( 6 ,'Pat1', 'Drug3', '2012-12-19', '2013-01-30', '42 ', '120 ', 78 ) ,
( 7 ,'Pat1', 'Drug3', '2013-01-30', '2013-02-27', '28 ', NULL, -28 ) ,
( 8 ,'Pat1', 'Drug3', '2013-02-27', '2013-04-24', '56 ', '30 ', -26 ) ,
( 9 ,'Pat1', 'Drug3', '2013-04-24', '2013-08-14', '112 ', '90 ', -22 ) ,
( 10 ,'Pat1', 'Drug3', '2013-08-14', '2014-01-23', '162 ', '120 ', -42 ) ,
( 11 ,'Pat1', 'Drug3', '2014-01-23', '2014-04-02', '69 ', '120 ', 51 ) ,
( 12 ,'Pat1', 'Drug3', '2014-04-02', '2014-08-18', '138 ', '120 ', -18 ) ,
( 13 ,'Pat1', 'Drug3', '2014-08-18', '2015-01-15', '150 ', '90 ', -60 ) ,
( 14 ,'Pat1', 'Drug3', '2015-01-15', '2015-05-07', '112 ', '120 ', 8 ) ,
( 15 ,'Pat1', 'Drug3', '2015-05-07', NULL, NULL, '120 ', 120 )
--Select * from @t
;with mycte as (
Select
ID, Patid, Drugid, DateVal,NextDate, Duration,qty, Remaining, --Surplus,FinishDate,
Sum(Remaining)Over (Partition by Patid, Drugid Order by id) as R1,
CASE
When Sum(Remaining)Over (Partition by Patid, Drugid Order by id) <0 then 0
Else Remaining
End as R2
from @t )
,mycte2 as (
Select *, Sum( Case when Remaining>= R2 or Remaining>= R1 Then 0 Else 1 End) Over(Partition by Patid, Drugid Order by id) grp,
ISNULL(Nullif(R2,0),Case when Remaining<= R1 Then 0 Else Remaining End ) R3
from mycte )
Select ID, Patid, Drugid, DateVal, NextDate,Duration,qty, Remaining, --Surplus FinishDate,
sum(R3) Over(Partition by Patid, Drugid, grp Order by id) AcumulativeTotal
from mycte2
Order by 2,3,1
Here is the result with the desired effect:
ID Patid Drugid DateVal NextDate Duration qty Remaining AcumulativeTotal DisiredEffect
1 Pat1 Drug3 27/06/2012 08/08/2012 42 60 18 18 18
2 Pat1 Drug3 08/08/2012 29/08/2012 21 NULL -21 0 0
3 Pat1 Drug3 29/08/2012 24/09/2012 26 30 4 4 4
4 Pat1 Drug3 24/09/2012 02/12/2012 69 60 -9 0 0
5 Pat1 Drug3 02/12/2012 19/12/2012 17 30 13 13 13
6 Pat1 Drug3 19/12/2012 30/01/2013 42 120 78 91 104
7 Pat1 Drug3 30/01/2013 27/02/2013 28 NULL -28 63 167
8 Pat1 Drug3 27/02/2013 24/04/2013 56 30 -26 37 204
9 Pat1 Drug3 24/04/2013 14/08/2013 112 90 -22 15 219
10 Pat1 Drug3 14/08/2013 23/01/2014 162 120 -42 0 219
11 Pat1 Drug3 23/01/2014 02/04/2014 69 120 51 51 270
12 Pat1 Drug3 02/04/2014 18/08/2014 138 120 -18 0 270
13 Pat1 Drug3 18/08/2014 15/01/2015 150 90 -60 -60 210
14 Pat1 Drug3 15/01/2015 07/05/2015 112 120 8 -52 158
15 Pat1 Drug3 07/05/2015 NULL NULL 120 120 68 226
1 Pat2 Drug1 25/10/2012 28/02/2013 126 120 -6 0 0
2 Pat2 Drug1 28/02/2013 20/06/2013 112 112 0 0 0
3 Pat2 Drug1 20/06/2013 08/10/2013 110 120 10 10 10
4 Pat2 Drug1 08/10/2013 13/01/2014 97 120 23 33 33
5 Pat2 Drug1 13/01/2014 28/01/2014 15 NULL -15 18 18
6 Pat2 Drug1 28/01/2014 03/02/2014 6 120 114 132 132
7 Pat2 Drug1 03/02/2014 07/02/2014 4 14 10 142 142
8 Pat2 Drug1 07/02/2014 12/08/2014 186 NULL -186 0 0
9 Pat2 Drug1 12/08/2014 02/12/2014 112 120 8 8 8
10 Pat2 Drug1 02/12/2014 22/03/2015 110 120 10 18 18
11 Pat2 Drug1 22/03/2015 26/03/2015 4 14 10 28 28
12 Pat2 Drug1 26/03/2015 17/04/2015 22 14 -8 20 20
13 Pat2 Drug1 17/04/2015 NULL NULL 120 120 140 140
1 Pat2 Drug2 02/02/2011 04/02/2011 2 1 -1 0 0
2 Pat2 Drug2 04/02/2011 20/06/2011 136 NULL -136 -136 0
3 Pat2 Drug2 20/06/2011 19/11/2012 518 NULL -518 -654 0
4 Pat2 Drug2 19/11/2012 27/11/2012 8 7 -1 -655 0
5 Pat2 Drug2 27/11/2012 10/01/2014 409 90 -319 -974 0
6 Pat2 Drug2 10/01/2014 11/01/2014 1 14 13 -961 13
7 Pat2 Drug2 11/01/2014 03/02/2014 23 14 -9 -970 4
8 Pat2 Drug2 03/02/2014 07/02/2014 4 14 10 -960 14
9 Pat2 Drug2 07/02/2014 21/03/2015 407 NULL -407 -1367 0
10 Pat2 Drug2 21/03/2015 22/03/2015 1 14 13 -1354 13
11 Pat2 Drug2 22/03/2015 26/03/2015 4 14 10 -1344 23
12 Pat2 Drug2 26/03/2015 NULL NULL 14 14 -1330 37
All are welcome to take another look, please.
thank you
Aku
Akuyali
-
Edited by
AkuYali
Wednesday, July 08, 2015 4:43 PM