OracleのSQLでROW_NUMBER
を利用した特殊な検索方法をご紹介します。
ROW_NUMBER
とは、その名の通り抽出したレコードに対して行番号を付与する分析関数ですが、今回はこの関数を利用して、最近データを更新したレコードが特定の件数に達した日が何日かを調べます。
目次
ROW_NUMVERを利用したサンプル
以下の例では、更新日を過去に遡って100件に達した日を取得するサンプルです。
1 2 3 4 5 6 7 |
SELECT MAX(UPDATED_AT) FROM ( SELECT UPDATED_AT ROW_NUMBER() OVER (ORDER BY UPDATED_AT DESC) AS RN FROM TABLE_NAME ) WHERE RN >= 100 |
解説
ROW_NUMBER()OVER()
を利用し、ORDER BY
更新日順で並び替えます。
WHERE
句で件数が100件に達した更新日のMAX()
を取得します。例えば、現在3月30日で、結果が3月20日だとすると、3月20〜3月30日に更新されたデータが100件以上ある事になります。上記はとても特殊な使い方です。
著者は試験などで特定の件数が欲しい場合に利用しました。
基本的な使い方についてはこちらをご参照ください。
分析関数 ROW_NUMBER の使用例 - オラクル・Oracleをマスターするための基本と仕組み
ROW_NUMBERファンクションの使用例と使用上の注意点、TOP n 〜
日付じゃなく何日前か知りたい
こちらと合わせると何日前も算出できます。
SQLで2つの日付の差分日数を計算する【メモ】 | minory
あるデータが何日前のデータなのか知りたい時ってあるよね〜?プログラミングでは、便利な関数が用意されていることもありますが、逆にタイムスタンプに変換して60だの24だ...
コメント