Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Znajdź datę MIN i MAX w nieciągłym okresie czasu RRRRMM00

Jest to rodzaj problemu luk i wysp. Można go rozwiązać nawet w nieobsługiwanym starożytnym oprogramowaniu, takim jak SQL Server 2005, ponieważ ta wersja ma row_number() .

Jedna sztuczka polega na przekonwertowaniu identyfikatora czasu na w dobrej wierze data/godzina. Inną sztuczką jest zdefiniowanie grup poprzez odjęcie kolejnej liczby miesięcy od wartości daty/czasu:

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

Tu to db<>skrzypce.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Obsługa błędów SQL Server:wyjątki i umowa klient bazy danych

  2. Przeprowadź migrację kolumny DateTime programu SQL Server do DateTimeOffset

  3. Wzorzec nazwy pliku docelowego pliku płaskiego serwera SQL Server SSIS (data, godzina lub podobny)?

  4. Jak wykryć i powiązać zmiany między wartościami wierszy w tabeli SQL?

  5. Poziomy izolacji programu SQL Server:seria A