2007年8月3日金曜日

Oracleで最新10件のみを残して他を削除するSQL

スズキです。

対象テーブルは下記とします。

--------MEMBER(会員テーブル)
MEMBER_ID: 会員ID(重複)
REGIST_DATE: データ登録日時
--------

で、実現するSQLは下記となります。
(ポイントはROWNUMですね)
※特定のMEMBER_IDに対して実施します。

--------
DELETE FROM MEMBER
WHERE MEMBER_ID = /*memberId*/38
AND REGIST_DATE < (
  SELECT
    REGIST_DATE
  FROM (
    SELECT
      ROWNUM AS TMP,
      REGIST_DATE
    FROM (
      SELECT
        REGIST_DATE
      FROM MEMBER
      WHERE MEMBER_ID = /*memberId*/38
      ORDER BY REGIST_DATE DESC
    )
  )
  WHERE TMP = 10
)
--------

OracleもLIMIT/OFFSETがあればなー。

--
blog: http://suz-lab.blogspot.com/

0 コメント: