業(yè)務場景: 在針對某個類型數(shù)據(jù)存在多條時,但只想取最新的一條。在可以確定時哪種類型時我們使用簡單sql就可以解決。 如: select * from ( select * from t_table a where a.tpye=? order by a.time desc ) where rownum=1; 但是在我們不確定時哪種類型時,需要全表掃描或者多數(shù)據(jù)掃描時,就需要用到oracle中特有的函數(shù)解決了。 如:select * from (select a.type,row_number() over(partition by a.type order by a.time desc) as rn from t_table a where xxxx) where rn=1; 其中partition by后面跟的字段表示根據(jù)此字段去區(qū)分跟分組,order by 進行排序,row_number() over 這個表示根據(jù)里面的條件去獲取行數(shù), 總結(jié)這個函數(shù)的意思:根據(jù)type字段分組根據(jù)time字段排序后,獲取此type在表中存在多少數(shù)據(jù)(存在多少則表示rn有多少行)rn=1表示取第一行也就拿到了最新的數(shù)據(jù)。 |
|