oracle 根據排序去重取第一條
阿新 • • 發佈:2022-01-20
原文轉自 https://www.jianshu.com/p/d5c0a355890b,感謝作者styone分享。
SELECT t.*
FROM
(SELECT a.*, row_number ( ) over ( PARTITION BY userid ORDER BY 時間欄位 DESC ) rw FROM 需要查詢的表 a ) t
WHERE t.rw =1
ow_number()over(partition by col1 order by col2)表示根據col1分組,在分組內部根據col2排序,而此函式計算的值就表示每組內部排序後的順序編號(組內連續的唯一的)。
與rownum的區別在於:使用rownum進行排序的時候是先對結果集加入偽劣rownum然後再進行排序,而此函式在包含排序從句後是先排序再計算行號碼。
row_number()和rownum差不多,功能更強一點(可以在各個分組內從1開始排序)。
rank()是跳躍排序,有兩個第二名時接下來就是第四名(同樣是在各個分組內)
dense_rank()也是連續排序,有兩個第二名時仍然跟著第三名。相比之下row_number是沒有重複值的。
oracle 分析函式 row_number(),返回一個整數值(>=1);
凡哥,別他媽吹牛逼了