sql >> Database >  >> RDS >> Sqlserver

Zoek de MIN- en MAX-datum op een onderbroken tijdsperiode JJJJMM00

Dit is een soort gaps-and-islands-probleem. Het is zelfs oplosbaar in niet-ondersteunde oude software zoals SQL Server 2005, omdat die versie row_number() heeft .

Een truc is om de tijd-ID om te zetten in een bonafide datum Tijd. De andere truc is om de groepen te definiëren door een opeenvolgend aantal maanden af ​​te trekken van de datum/tijd-waarde:

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

Hier is een db<>viool.



  1. Moet ik Query Cache in MySQL uitschakelen?

  2. Is de kolomvolgorde van belang in uw MySQL-tabellen?

  3. Hoe ververs je het MySQL-configuratiebestand zonder opnieuw op te starten?

  4. Wat is een MDF-bestand?