2019-01-31

【Oracle】查詢當 欄位1 值相同時,取 欄位2, 3, ... 排序後第一筆記錄

查詢當 欄位1 值相同時,取 欄位2, 3, ... 排序後第一筆記錄

通常用在某欄位值相同時有數筆記錄,只取第一筆。


  1.  
  2. SELECT * FROM
  3. (
  4. SELECT a.*, row_number() OVER (PARTITION BY field1 ORDER BY field2 DESC, field3 DESC) rn FROM
  5. (
  6. SELECT field1, field2, field3, field4, field5 FROM table1
  7. WHERE field5='關鍵值'
  8. ) a
  9. ) WHERE rn=1
  10.  


其實這個語法也可以用於排序,例如不同的資料庫語言在取前幾筆記錄的實做,語法各不相同,例如:
MySQL 用 LIMIT
MSSQL 用 TOP
Oracle 用 rownum


若您公司有個資料庫同時存在於二個(以上) 的平台(例如 MSSQL 用於即時交易,每日結算後,將資料轉入 Oracle,在 Oracle 進行大量的資料分析),想要有一個通用於不同平台的語法,上述的語法就用的上。

曾經看到有篇專欄文章,就推薦這種做法,避免使用資料庫的專屬指令。