sql >> Database teknologi >  >> RDS >> Sqlserver

Få øverste 1 række af hver gruppe

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

Hvis du forventer 2 tilmeldinger om dagen, vil dette vilkårligt vælge en. For at få begge poster for en dag, brug DENSE_RANK i stedet

Hvad angår normaliseret eller ej, afhænger det af, om du vil:

  • oprethold status 2 steder
  • bevar statushistorik
  • ...

Som den står, bevarer du statushistorik. Hvis du også vil have den seneste status i den overordnede tabel (som er denormalisering), skal du bruge en trigger for at bevare "status" i forælderen. eller slip denne statusoversigtstabel.



  1. Implementering af fejl- og transaktionshåndtering i SQL Server

  2. Sådan angiver du primærnøglenavn i EF-kode-først

  3. Implementering af en fælles MS SQL Server Performance Indicator

  4. Valg af processor til SQL Server 2014 – Del 2