ひでっぷの技術メモ

はてなダイアリーから移行しました

ROW_NUMBER()関数

SQLで条件で引っ張ってきたデータの上位何件だけとかほしい時がありますよね。

そんな場合mysqlではLIMIT句を用いると簡単にできます。

SELECT * FROM HOGEHOGE ORDER BY ID LIMIT 1;

これでID順の一番最初のデータ(一番若い物)が取り出せます。


oracleで同じ事をやろうとするとどうもROW_NUMBER()関数をいうのを使用しないといけないみたい。

SELECT * , ROW_NUMBER() OVER (ORDER BY ID) AS RN FROM HOGEHOGE WHERE RN = 1;

IDの若い物順に番号をふってそれの1のもの(1番若い物)を取り出すってことですね。

メンドクサッ

なんて文句を言っていても始まらないのでごりごり書いてみました。
すると・・・

ORA-00439: 機能は使用できません: OLAP Window Functions


・・・調べてみました。

分析関数(row_number)は、
・Oracle9i以降のSTANDARD/ENTERPRISEのエディション
・Oracle8.1.6/8.1.7のENTERPRISEエディション
 
で使えます。


orz


うちのはOracle8.1.6 STANDARDなんだな・・・。
金たくさん払わないと使えない機能なのか・・・
(って批判があったから9iでは使えるようにしたんだろうけど)

いいよ。とってきたレコードセットの最初のものを取り出すようにするから・・・。

もうoracleやだ・・・