從 SQL 數據庫中的每個組中提取頂行
數據分組和分析是數據庫管理的基礎。 通常,您需要識別每個組中的頂行(例如,最新條目)。 本文演示瞭如何使用 SQL 有效地實現這一點。
利用窗口函數
雖然 SQL 沒有為此任務提供專用的聚合函數,但窗口函數提供了一個優雅的解決方案。 這些函數對定義範圍內的行集進行操作,從而能夠對數據子集進行計算和聚合。
考慮一個名為“DocumentStatusLogs”的表,其中包含“DocumentID”、“Status”和“DateCreated”列。要檢索每個文檔的最新狀態,請使用以下 SQL 查詢:
<code class="language-sql">WITH RankedLogs AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY DocumentID ORDER BY DateCreated DESC) as rn FROM DocumentStatusLogs ) SELECT * FROM RankedLogs WHERE rn = 1;</code>
通用表表達式 (CTE)“RankedLogs”使用 ROW_NUMBER()
對每個“DocumentID”分區中的行進行排名,按“DateCreated”(降序)排序。然後,主查詢僅選擇帶有 rn = 1
的行,從而有效地返回每個組的頂行。
標準化和數據完整性
原來的問題還涉及數據庫規範化。 示例表(“DocumentStatusLogs”)維護狀態更改的歷史記錄。 保留此歷史記錄有利於跟踪隨時間的變化。 但是,如果您需要立即訪問最新狀態,請考慮將“CurrentStatus”列添加到“CurrentDocuments”表並使用觸發器來更新它。 這需要仔細管理以確保數據一致性並避免異常。
通過結合窗口函數和對數據標準化的深思熟慮,您可以有效地檢索 SQL 數據庫中每個組的頂行。
以上是如何有效率地檢索 SQL 資料庫中每個群組的頂行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!