OracleのSQLでROW_NUMBER
を利用した特殊な検索方法をご紹介します。
ROW_NUMBER
とは、その名の通り抽出したレコードに対して行番号を付与する分析関数ですが、今回はこの関数を利用して、最近データを更新したレコードが特定の件数に達した日が何日かを調べます。
ROW_NUMVERを利用したサンプル
以下の例では、更新日を過去に遡って100件に達した日を取得するサンプルです。
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ファンクションの使用例と使用上の注意点、TOP n 〜 分析関数 ROW_NUMBER の使用例 - オラクル・Oracleをマスターするための基本と仕組み - www.shift-the-oracle.com |
日付じゃなく何日前か知りたい
こちらと合わせると何日前も算出できます。
あるデータが何日前のデータなのか知りたい時ってあるよね〜?プログラミングでは、便利な関数が用意されていることもありますが、逆にタイムスタンプに変換して60だの24だの掛け算したり…。日付をそのまま引き算することは難しいですが、SQL(今回はOracle)では型... SQLで2つの日付の差分日数を計算する【メモ】 - Minory |
- Original:https://minory.org/oracle-sql-row_number.html
- Source:Minory
- Author:管理者
Amazonベストセラー
Now loading...