<pre><code class="lang-auto">WITH cte AS
(
SELECT *,
ROW_NUMBER() OVER (PARTITION BY DocumentID ORDER BY DateCreated DESC) AS rn
FROM DocumentStatusLogs
)
SELECT *
FROM cte
WHERE rn = 1
</code></pre>
<p>Si vous attendez 2 entrées par jour, alors cela en choisira une de manière arbitraire. Pour obtenir les deux entrées d’un jour, utilisez DENSE_RANK au lieu de ROW_NUMBER.</p>
<p>Quant à savoir si c’est normalisé ou non, cela dépend de si vous souhaitez :</p>
<ul>
<li>
<p>maintenir le statut à 2 endroits</p>
</li>
<li>
<p>préserver l’historique des statuts</p>
</li>
<li>
<p>…</p>
</li>
</ul>
<p>En l’état, vous préservez l’historique des statuts. Si vous souhaitez aussi le dernier statut dans la table parente (ce qui est de la dénormalisation), vous auriez besoin d’un déclencheur pour maintenir le « statut » dans la table parente. Ou bien supprimer cette table d’historique des statuts.</p>