Dit is een soort gaps-and-islands-probleem. Het is zelfs oplosbaar in niet-ondersteunde oude software zoals SQL Server 2005, omdat die versie row_number()
heeft .
Een truc is om de tijd-ID om te zetten in een bonafide datum Tijd. De andere truc is om de groepen te definiëren door een opeenvolgend aantal maanden af te trekken van de datum/tijd-waarde:
select player, team, min(timeid), max(timeid)
from (select lp.*,
row_number() over (partition by player, team order by timeid) as seqnum,
cast(cast(timeid + 1 as varchar(255)) as datetime) as yyyymm
from logplayer lp
) lp
group by player, team, dateadd(month, - seqnum, yyyymm)
order by player, team, min(timeid);
Hier is een db<>viool.