ROW_NUMBERで指定したレコード件数が更新された日を遡る

oracle-sql-row_number

OracleSQLROW_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



Amazonベストセラー

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA