Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Trouver la date MIN et MAX sur une période de temps discontinue AAAAMM00

Il s'agit d'un type de problème de lacunes et d'îlots. Il est résoluble même dans les anciens logiciels non pris en charge comme SQL Server 2005, car cette version a row_number() .

Une astuce consiste à convertir l'identifiant de l'heure en un bona fide date/heure. L'autre astuce consiste à définir les groupes en soustrayant un nombre séquentiel de mois de la valeur date/heure :

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

ici est un db<>violon.