sql >> Database teknologi >  >> RDS >> Sqlserver

Find MIN- og MAX-dato på et usammenhængende tidsrum ÅÅÅÅMM00

Dette er en form for huller-og-øer-problem. Det er løseligt selv i ikke-understøttet gammel software som SQL Server 2005, fordi den version har row_number() .

Et trick er at konvertere tids-id'et til en bona fide dato tid. Det andet trick er at definere grupperne ved at trække et sekventielt antal måneder fra dato/tidsværdien:

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

Her er en db<>violin.



  1. Kan ikke oprette testfil lavere test start server mysql

  2. Syntaksfejl i UPSERT-testkode

  3. Automatisk udfyldning af tekstboks afhængigt af dropdown-værdi

  4. Hvordan kan jeg oprette et job eller en begivenhed i mysql