Jest to rodzaj problemu luk i wysp. Można go rozwiązać nawet w nieobsługiwanym starożytnym oprogramowaniu, takim jak SQL Server 2005, ponieważ ta wersja ma row_number()
.
Jedna sztuczka polega na przekonwertowaniu identyfikatora czasu na w dobrej wierze data/godzina. Inną sztuczką jest zdefiniowanie grup poprzez odjęcie kolejnej liczby miesięcy od wartości daty/czasu:
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);
Tu to db<>skrzypce.