求分組中某個字段最大值

問題:

表A
NAME DATE COL1
------------------------------
A 2011/06/07 4
A 2011/06/09 6
A 2011/06/03 7
B 2011/06/29 5
B 2011/06/30 6
求查詢出每個NAME下的日期最大的結果
NAME DATE COL1
------------------------------
A 2011/06/09 6
B 2011/06/30 6

WITH a AS (
SELECT 'A' NAME,'2011/06/07'  "DATE",'4' COL1 FROM dual UNION ALL
SELECT 'A' NAME,'2011/06/09'  "DATE",'6' COL1 FROM dual UNION ALL
SELECT 'A' NAME,'2011/06/03'  "DATE",'7' COL1 FROM dual UNION ALL
SELECT 'B' NAME,'2011/06/29'  "DATE",'5' COL1 FROM dual UNION ALL
SELECT 'B' NAME,'2011/06/30'  "DATE",'6' COL1 FROM dual            
)
--方法一
SELECT NAME,"DATE",COL1 FROM 
(SELECT NAME,"DATE",COL1,row_number() over (partition by NAME order by "DATE" desc) rn FROM a) 
WHERE rn=1
;
--方法二
select NAME,max("DATE"),max(COL1)keep(dense_rank first order by "DATE" desc) col1
       from a
      group by name;


方法一

常規分析函數。

ROW_NUMBER :返回有序組中一行的偏移量,從而可用於按特定標準排序的行號

方法二

first / last從DENSE_RANK返回的集合中取出排在最前面(後面)的一個值的行(可能多行,因爲值可能相等),因此完整的語法需要在開始處加上一個集合函數以從中取出記錄

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章