通常用在某欄位值相同時有數筆記錄,只取第一筆。
SELECT * FROM ( SELECT a.*, row_number() OVER (PARTITION BY field1 ORDER BY field2 DESC, field3 DESC) rn FROM ( SELECT field1, field2, field3, field4, field5 FROM table1 WHERE field5='關鍵值' ) a ) WHERE rn=1
其實這個語法也可以用於排序,例如不同的資料庫語言在取前幾筆記錄的實做,語法各不相同,例如:
MySQL 用 LIMIT
MSSQL 用 TOP
Oracle 用 rownum
若您公司有個資料庫同時存在於二個(以上) 的平台(例如 MSSQL 用於即時交易,每日結算後,將資料轉入 Oracle,在 Oracle 進行大量的資料分析),想要有一個通用於不同平台的語法,上述的語法就用的上。
曾經看到有篇專欄文章,就推薦這種做法,避免使用資料庫的專屬指令。