SQL Server 2005:跨多個類別檢索前 10 筆記錄
本指南示範如何使用 SQL Server 2005 在單一 SQL 查詢中高效檢索每個類別(部分)的前 10 筆記錄。假設您的表包含一個“部分”列,將記錄分類為“業務”、“本地”和“功能”,並且您需要每個部分在特定日期的 10 個最新條目。
查詢解:
以下 SQL 查詢使用 RANK()
視窗函數實現此目的:
<code class="language-sql">SELECT rs.Field1, rs.Field2 FROM ( SELECT Field1, Field2, RANK() OVER (PARTITION BY Section ORDER BY RankCriteria DESC) AS Rank FROM table ) AS rs WHERE Rank <= 10</code>
說明:
SELECT rs.Field1, rs.Field2
選擇所需的欄位。 SELECT Field1, Field2, RANK() ...
執行排名。 PARTITION BY Section
:這將資料分為不同的部分(「業務」、「本地」、「功能」等)。 每個部分的排名都是獨立的。 ORDER BY RankCriteria DESC
:這將根據您的排名標準(例如日期、ID)對每個部分中的記錄進行排序。 DESC
確保最新記錄排名最高。 RANK()
:這會為其部分內的每筆記錄分配一個排名。 具有相同 RankCriteria
值的記錄將獲得相同的排名。 WHERE Rank <= 10
過濾結果以僅包含每個部分的前 10 條記錄(按排名)。 重要注意事項:
RankCriteria
值,它們將獲得相同的排名。 如果前 10 名排名中存在平局,這可能會導致某個部分返回超過 10 條記錄。 ROW_NUMBER()
而不是 RANK()
。 ROW_NUMBER()
分配唯一的序號,保證每個部分有 10 筆記錄。 但是,如果綁定記錄超過 10 條,它可能會任意選擇包含哪些綁定記錄。 此方法提供了一種簡潔且有效率的方法,用於在 SQL Server 2005 中跨多個類別檢索前 N 筆記錄。記得將 "table"
、"Field1"
、"Field2"
和 "RankCriteria"
替換為實際的表名和列名.
以上是如何在SQL Server 2005中檢索多個類別的前10筆記錄?的詳細內容。更多資訊請關注PHP中文網其他相關文章!