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

Popular posts from this blog

c# - Validate object ID from GET to POST -

node.js - Custom Model Validator SailsJS -

php - Find a regex to take part of Email -