SELECT
t.*
FROM
( SELECT a.*, row_number ( ) over ( PARTITION BY userid ORDER BY 時(shí)間字段 DESC ) rw FROM 需要查詢的表 a ) t
WHERE
t.rw =1
row_number()over(partition by col1 order by col2)表示根據(jù)col1分組落塑,在分組內(nèi)部根據(jù)col2排序,而此函數(shù)計(jì)算的值就表示每組內(nèi)部排序后的順序編號(hào)(組內(nèi)連續(xù)的唯一的)瘸彤。
與rownum的區(qū)別在于:使用rownum進(jìn)行排序的時(shí)候是先對(duì)結(jié)果集加入偽劣rownum然后再進(jìn)行排序佩脊,而此函數(shù)在包含排序從句后是先排序再計(jì)算行號(hào)碼验庙。
row_number()和rownum差不多润梯,功能更強(qiáng)一點(diǎn)(可以在各個(gè)分組內(nèi)從1開始排序)过牙。
rank()是跳躍排序甥厦,有兩個(gè)第二名時(shí)接下來就是第四名(同樣是在各個(gè)分組內(nèi))
dense_rank()也是連續(xù)排序,有兩個(gè)第二名時(shí)仍然跟著第三名寇钉。相比之下row_number是沒有重復(fù)值的刀疙。
oracle 分析函數(shù) row_number(),返回一個(gè)整數(shù)值(>=1);