Как ограничить количество строк на идентификатор в базе данных оракула? - PullRequest
2 голосов
/ 14 сентября 2011

Я хочу сохранить последние 20 товаров, которые просматривал пользователь.Если пользователь просматривает продукт с номером 21, самую старую из записей следует удалить из базы данных ORACLE.

Таблица содержит недавно просмотренные продукты всех пользователей в системе.

Таким образом, в основномМне нужно проверить, есть ли у пользователя X записи над Y в таблице, и если это так, удалить самые старые записи, чтобы у пользователя X были только записи Y в таблице недавно просмотренных продуктов.

Любая помощь будет принята.

Вот моя попытка, которая не работает правильно.

DELETE FROM VIEWED_PRODUCT
WHERE id NOT IN (
  SELECT id
  FROM (
    SELECT * FROM (
      SELECT id
      FROM VIEWED_PRODUCT
      WHERE MY_ID = 1626
      ORDER BY CREATED_AT DESC )
        WHERE ROWNUM <= 20 
  ) z
);

Спасибо.

1 Ответ

3 голосов
/ 14 сентября 2011

Вы можете использовать такие аналитические функции:

delete viewed_product where id in
( select id from
  ( select id, row_number() over (order by created_at desc) rn
    from viewed_product
    where my_id = :bindvar
  )
  where rn > 20
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...