sql >> Base de Datos >  >> RDS >> Sqlserver

Encuentre la fecha MIN y MAX en un período de tiempo discontinuo AAAAMM00

Este es un tipo de problema de lagunas e islas. Es solucionable incluso en software antiguo no compatible como SQL Server 2005, porque esa versión tiene row_number() .

Un truco es convertir la identificación de tiempo en una de buena fe fecha y hora. El otro truco es definir los grupos restando un número secuencial de meses del valor de fecha/hora:

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);

Aquí es un db<>violín.