sql >> Databáze >  >> RDS >> Sqlserver

Najděte MIN a MAX datum v nespojitém časovém období RRRRMM00

Toto je typ problému mezer a ostrovů. Je řešitelný i v nepodporovaném starověkém softwaru, jako je SQL Server 2005, protože tato verze má row_number() .

Jedním trikem je převedení časového id na bona fide čas schůzky. Dalším trikem je definovat skupiny odečtením sekvenčního počtu měsíců od hodnoty data/času:

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

Zde je db<>hudlík.



  1. Získejte střed křivky SDO.GEOMETRY

  2. Jak vygenerovat výpis Postgresql z kontejneru Docker?

  3. VYBRAT uživatele z databáze MySQL pomocí bitové masky oprávnění?

  4. Jak vytvořit instalační program ve VB.NET, který dokáže nainstalovat SQL Server Express Edition?