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

Uzyskaj 1 górny wiersz z każdej grupy

;WITH cte AS
(
   SELECT *,
         ROW_NUMBER() OVER (PARTITION BY DocumentID ORDER BY DateCreated DESC) AS rn
   FROM DocumentStatusLogs
)
SELECT *
FROM cte
WHERE rn = 1

Jeśli oczekujesz 2 wpisów dziennie, to arbitralnie wybierze jeden. Aby otrzymać oba wpisy na jeden dzień, użyj zamiast tego DENSE_RANK

Znormalizowane czy nie, zależy od tego, czy chcesz:

  • utrzymaj status w 2 miejscach
  • zachowaj historię stanu
  • ...

W obecnej postaci zachowujesz historię statusu. Jeśli chcesz również najnowszego statusu w tabeli nadrzędnej (co jest denormalizacją), potrzebujesz wyzwalacza, aby utrzymać „status” w rodzicu. lub upuść tę tabelę historii stanu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pomysłowe narzędzie SQL Password Changer do resetowania hasła SQL

  2. Schemat serwera SQL i domyślny schemat

  3. Rozwiązywanie problemów z długimi zapytaniami w MS SQL Server

  4. Jak zwrócić wszystkie wyłączone ograniczenia kontrolne w programie SQL Server (przykład T-SQL)

  5. Konfiguracja środowiska startowego w SQL Server Management Studio (SSMS) — samouczek SQL Server / TSQL część 7