sql логическая сортировка

Имеется БД в MS SQL Server, Таблица WorkitemsCache содержит жизненный цикл талона (тикета), который разработчик доводил до логического завершения. введите сюда описание изображения

Требуется вернуть список строк, которые отрываются более чем на 5 мин от предыдущей строки с таким же TicketId. Планирую это реализовать с помощью подзапроса и ORDER BY, но выхода пока не нашел. Заранее спасибо за вашу помощь.


Ответы (1 шт):

Автор решения: dzhukov

Если так:

declare
    @t table (Ticket int, DT datetime)

declare
    @dt datetime=getdate()
insert into @t 
select 1, @dt
union all
select 1, dateadd(minute, 1, @dt)
union all
select 1, dateadd(minute, 7, @dt)
union all
select 1, dateadd(minute, 10, @dt)
union all
select 1, dateadd(minute, 37, @dt)
union all
select 2, @dt
union all
select 2, dateadd(minute, 2, @dt)
union all
select 2, dateadd(minute, 10, @dt)
union all
select 2, dateadd(minute, 25, @dt)
union all
select 2, dateadd(minute, 27, @dt)


select *, datediff (minute, PrevDT, DT) from (
    select *, LAG (DT, 1 )  over (PARTITION BY Ticket order by Ticket, DT) as PrevDT
    from @t
)t
where datediff (minute, PrevDT, DT)>5
→ Ссылка