T-SQL Start and end date times from a single column

后端 未结 3 1631
夕颜
夕颜 2021-01-24 11:34

I have a single table of on/off events for different assets. I need to get a list of start & stop event times without using a cursor.

Source:

Item          


        
3条回答
  •  Happy的楠姐
    2021-01-24 11:42

    declare @YourTable table (Item varchar(10), EventDate datetime, Event varchar(10)) 
    
    insert into @YourTable values 
    ('A','2011-10-03 00:01:00''On'), 
    ('B','2011-10-03 00:01:00','On'), 
    ('A','2011-10-03 00:02:00','Off'), 
    ('C','2011-10-03 00:01:00','On'), 
    ('B','2011-10-03 00:02:00','Off'), 
    ('A','2011-10-03 00:02:02','On'),   
    ('C','2011-10-03 00:02:05','Off'), 
    ('A','2011-10-03 00:02:07','Off'), 
    ('D','2011-10-03 00:02:02','On')   
    
    ;with a as
    (
    select item, eventdate, event, ROW_NUMBER() Over(Partition by Item order by EventDate) RN 
    from @YourTable
    ),
    b as (
    select item, eventdate, 0 e, rn, event from a where rn = 1
    union all
    select b.item, a.eventdate, case when b.event = 'Off' then b.e+1 else b.e end, a.rn, a.event
    from b 
    join a on b.rn + 1 = a.rn and a.item = b.item
    )
    select item, min(eventdate) Start, max(eventdate) [End]
     from b
    group by item, e
    order by item, e
    

提交回复
热议问题