tsql - SQL OVER(Partition) issue - selecting a subset -
i'm trying specific subset of data using "over(partition)" syntax. i've created sample data illustrate. running following cte results in small example result set.
i need calculate 2 date ranges using following definitions/pseudocode 1: days close = closedate stat = 'closed' minus opendate partitioned problem 2: days solve = "closeddate stat = 'solved' minus opendate partitioned problem.
i can #1 using over(partition) syntax, cannot figure out #2.
with cte ( select 114110712007835 'srnumber', 214110712007835004 problemnumber, 'open' 'stat', 314110712007835004001 tasknumber, convert(datetime, '2015-03-02 19:47:43',120) opendate, convert(datetime, '2015-03-03 19:36:37',120) closedate union select 114110712007835 'srnumber', 214110712007835004 problemnumber, 'investigate' 'stat', 314110712007835004002 tasknumber, convert(datetime, '2015-03-04 00:29:13',120) opendate, convert(datetime, '2015-03-05 19:36:34',120) closedate union select 114110712007835 'srnumber', 214110712007835004 problemnumber, 'solve' 'stat', 314110712007835004003 tasknumber, convert(datetime, '2015-03-06 18:17:13',120) opendate, convert(datetime, '2015-03-07 13:07:31',120) closedate union select 114110712007835 'srnumber', 214110712007835004 problemnumber, 'close' 'stat', 315032012542588001001 tasknumber, convert(datetime, '2015-03-08 15:24:34',120) opendate, convert(datetime, '2015-03-09 15:15:42',120) closedate union select 114110712007835 'srnumber', 215032012542588001 problemnumber, 'open' 'stat', 315032012542588001002 tasknumber, convert(datetime, '2015-04-20 20:05:48',120) opendate, convert(datetime, '2015-04-21 03:24:24',120) closedate union select 114110712007835 'srnumber', 215032012542588001 problemnumber, 'investigate' 'stat', 315032012542588001003 tasknumber, convert(datetime, '2015-04-22 18:55:03',120) opendate, convert(datetime, '2015-04-23 03:24:28',120) closedate union select 114110712007835 'srnumber', 215032012542588001 problemnumber, 'solve' 'stat', 315032012542588001004 tasknumber, convert(datetime, '2015-04-24 13:35:24',120) opendate, convert(datetime, '2015-04-27 02:24:31',120) closedate union select 114110712007835 'srnumber', 215032012542588001 problemnumber, 'close' 'stat', 315032012542588001004 tasknumber, convert(datetime, '2015-04-26 13:35:24',120) opendate, convert(datetime, '2015-04-29 03:24:31',120) closedate ) select srnumber, problemnumber, stat, opendate, closedate, --min(opendate) over(partition problemnumber) mindate, max(closedate) over(partition problemnumber) maxdate case when stat = 'solve' datediff(mi,min(opendate) over(partition problemnumber),max(closedate) over(partition problemnumber)) else null end days_to_solve ,datediff(mi,min(opendate) over(partition problemnumber),max(closedate) over(partition problemnumber)) days_to_close cte order problemnumber asc, opendate asc go
a subquery result need.
select srnumber , problemnumber , stat , opendate , closedate , --min(opendate) over(partition problemnumber) mindate, max(closedate) over(partition problemnumber) maxdate ( case when stat = 'solve' ( select top 1 datediff(mi, min(opendate) on ( ), max(closedate) on ( )) cte c c.problemnumber = cte.problemnumber , c.closedate <= cte.closedate ) else null end ) days_to_solve , datediff(mi, min(opendate) on ( partition problemnumber ), max(closedate) on ( partition problemnumber )) days_to_close cte order problemnumber asc , opendate asc
Comments
Post a Comment