Один способ будет с LEAD
и LAG
select * from(
select
*,
myFlag = case
when abs(datediff(second,[date],lag([Date]) over (order by [Date]))) < 60 then 1
when abs(datediff(second,[date],lead([Date]) over (order by [Date]))) < 60 then 1
else 0
end
from yourtable)
where myFlag = 1
order by [Date]
. Вы можете удалить where myFlag = 1
, чтобы увидеть, какие из них помечены.
Или более уродливый метод:
with cte as(
select *, RN = row_number() over (order by [Date])
from yourtable
),
staging as(
select
c.ID
,c.Ticket_NUM
,c.[Date]
,c.Comments
,c2DT = min(c2.[Date])
,c3DT = max(c3.[Date])
from
cte c
left join cte c2 on c2.RN = c.RN + 1 --row above
left join cte c3 on c3.RN = c.RN - 1 --row below
group by
c.ID
,c.Ticket_NUM
,c.[Date]
,c.Comments)
select
c.ID
,c.Ticket_NUM
,c.[Date]
,c.Comments
from stating c
where abs(datediff(second,c.[Date],c.c2DT)) < 60 or abs(datediff(second,c.[Date],c.c3DT)) < 60