使用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進行順序結果集篩選),幾乎是數據庫層面分頁最好的解決方案。
"拋硬幣來決定吧,碎了我們就在一起。"