sql >> Databasteknik >  >> RDS >> Sqlserver

Hitta MIN- och MAX-datum på en diskontinuerlig tidsperiod ÅÅÅÅMM00

Detta är en typ av luckor-and-öar-problem. Det är lösbart även i gammal programvara som inte stöds som SQL Server 2005, eftersom den versionen har row_number() .

Ett knep är att konvertera tids-ID till ett bona fide datum Tid. Det andra tricket är att definiera grupperna genom att subtrahera ett sekventiellt antal månader från datum-/tidsvärdet:

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

Här är en db<>fiol.



  1. Finns det ett standardbibliotek för mysql-anslutningspoolning för C?

  2. Funktionen lower() på internationella tecken i postgresql

  3. hur man hämtar värden från databasen som inte är null

  4. Tomcat session.ser