これは一種のギャップアンドアイランド問題です。 SQL Server 2005 のようなサポートされていない古いソフトウェアでも解決できます。そのバージョンには row_number()
があるためです。 .
1 つのトリックは、タイム ID を 真正 に変換することです 日付時刻。もう 1 つのトリックは、日付/時刻の値から連続する月数を差し引いてグループを定義することです:
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);
こちら db<>フィドルです。