Oracle 和 SQL Server 按條件分組排序取最後一條 及其他 OVER使用

1.排序列爲唯一標識

select * from bu_upload where 
times in (select max(times) from bu_upload group by gs_no)

2.排序列非唯一標識 (server sql 2005以上也適用)

按gs_no 分組,按times 反向排序,生成行號rid ,取第一條(rid=1的)

SELECT * FROM

(

SELECT z.* ,ROW_NUMBER() OVER(PARTITION BY z.gs_no ORDER BY z.times desc) AS rid

FROM bu_upload z

)

WHERE rid =1;

 

OVER(PARTITION BY) 其他功能

-- select * from cte_child order by gro,level
-- select c.*,row_number() OVER(PARTITION BY gro ORDER BY level desc) AS rid from cte_child c --加行號
-- select c.*,DENSE_RANK() OVER(PARTITION BY gro ORDER BY level desc) AS rid from cte_child c --排名 並列不佔名次位
 select c.*,RANK() OVER(PARTITION BY gro ORDER BY level asc) AS rid from cte_child c --排名 並列佔名次位
-- select c.*,NTILE(4) OVER(PARTITION BY gro ORDER BY level asc) AS rid from cte_child c --排名 將數據分成指定組數,併爲每一組生成一個序號
-- SELECT c.*,COUNT(1) OVER(PARTITION BY gro) AS rid from cte_child c --分組,獲取組內數據行數
-- SELECT c.*,COUNT(1) OVER() AS rid from cte_child c --不分組,獲取所有數據行數 --可和OVER(PARTITION BY gro)同時使用
-- SUM,AVG(平均),MAX,MIN 同上
 

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