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

Získejte horní 1 řádek každé skupiny

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

Pokud očekáváte 2 záznamy za den, vybere se libovolně jeden. Chcete-li získat oba záznamy na den, použijte místo toho DENSE_RANK

Pokud jde o normalizované nebo ne, záleží, zda chcete:

  • udržovat stav na 2 místech
  • zachovat historii stavu
  • ...

Ve stávající podobě zachováte historii stavu. Pokud chcete také nejnovější stav v nadřazené tabulce (což je denormalizace), budete potřebovat spouštěč, který udrží „stav“ v nadřazené tabulce. nebo zrušte tuto tabulku historie stavu.



  1. Jak vytvořit menu v SQLPlus nebo PL/SQL

  2. Je časové pásmo java.sql.Timestamp specifické?

  3. jak exportovat data z tabulky protokolu do těla e-mailu v oracle

  4. HikariCP:Jaké časové limity na úrovni databáze je třeba vzít v úvahu při nastavení maxLifetime pro Oracle 11g