Đây là một dạng vấn đề về khoảng trống và đảo. Nó có thể giải quyết được ngay cả trong phần mềm cổ không được hỗ trợ như SQL Server 2005, vì phiên bản đó có row_number()
.
Một thủ thuật là chuyển đổi id thời gian thành thực tế ngày giờ. Một thủ thuật khác là xác định các nhóm bằng cách trừ một số tháng liên tiếp cho giá trị ngày / giờ:
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);
Tại đây là một db <> fiddle.