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

SQL Server:grupuj po kolei

W SQL Server można to zrobić za pomocą agregacji i różnicy numerów wierszy:

select HevEvenementID, HteTypeEvenID,
       max(HjvNumeSequJour)
from (select t.*,
             row_number() over (partition by HevEvenementID order by HjvNumeSequJour) as seqnum_1,
             row_number() over (partition by HevEvenementID, HteTypeEvenID order by HjvNumeSequJour) as seqnum_2
      from yourtable t
     ) t
group by HevEvenementID, HteTypeEvenID, (seqnum_1 - seqnum_2)
order by max(HjvNumeSequJour);

Myślę, że najlepszym sposobem zrozumienia, jak to działa, jest przyjrzenie się wynikom podzapytania. Zobaczysz, jak różnica między tymi dwiema wartościami definiuje grupy sąsiednich wartości.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. błąd:26 — Błąd lokalizowania określonego serwera/wystąpienia. (Nie mogę połączyć się z moją lokalną bazą danych z mojego serwera hosta)

  2. Łączenie wierszy z FOR XML, ale z wieloma kolumnami?

  3. Rozmiar tabeli i indeksu w SQL Server

  4. Dołączanie do rekordu daty MAX w grupie

  5. Wstaw SQL Bulk z relacjami nadrzędny/podrzędny, czy kolejność jest zachowana?