首頁 > 資料庫 > mysql教程 > 如何有效率地檢索 SQL 資料庫中每個群組的頂行?

如何有效率地檢索 SQL 資料庫中每個群組的頂行?

Mary-Kate Olsen
發布: 2025-01-25 19:57:15
原創
911 人瀏覽過

How to Efficiently Retrieve the Top Row for Each Group in a SQL Database?

從 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板