Вам потребуется recursive cte
, чтобы найти grp
связанных последовательных строк
seq
, чтобы идентифицировать первый из group
для идентификации если группа содержит pistol
, она использует оконную функцию sum()
с условной case
with
cte as
(
select *, rn = row_number() over (partition by PersonID order by StartDate)
from yourtable
),
rcte as
(
select c.PersonID, c.[Weapon Used], c.StartDate, c.EndDate, c.rn,
grp = 1, seq = 1
from cte c
where rn = 1
union all
select c.PersonID, c.[Weapon Used], c.StartDate, c.EndDate, c.rn,
grp = case when r.EndDate = c.StartDate
then r.grp
else r.grp + 1
end,
seq = case when r.EndDate = c.StartDate
then r.seq + 1
else 1
end
from cte c
inner join rcte r on c.PersonID = r.PersonID
and c.rn = r.rn + 1
)
select *,
case when seq = 1
and sum(case when [Weapon Used] = 'Pistol' then 1 else 0 end)
over (partition by PersonID, grp) >= 1
then 'TRUE'
else 'FALSE'
end
from rcte;