sql server分組排序並取出每組中的第一條數據


使用SQL Server數據庫在【分組排序並取出每組中的第一條數據】的場景下,很容易想到的是使用GROUP BY分組子句配合聚合函數。

舉個簡單的例子,有一個YANGGBS表,表中有NAME和AGE兩個字段,要求統計出每個NAME的最大AGE。

SELECT AA.*
FROM YANGGBS AA
    INNER JOIN (
        SELECT NAME, MAX(AGE)
        FROM YANGGBS
        GROUP BY NAME
    ) BB
        ON AA.NAME = BB.NAME

另外一種方法就是使用開窗函數(分析函數),分組排序之后通過每個組中的順序號來進行記錄篩選。

SELECT AA.*
FROM YANGGBS AA
    INNER JOIN (
        SELECT NAME, ROW_NUMBER(PARTITION BY NAME ORDER BY AGE) AS RN
        FROM YANGGBS
    ) BB
        ON AA.NAME = BB.NAME AND BB.RN = 1

更多的,這種方式在分頁的實現上用途很大(通過RN進行順序結果集篩選),幾乎是數據庫層面分頁最好的解決方案。

 

"拋硬幣來決定吧,碎了我們就在一起。"


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM