如何限制oracle数据库上每个id的行数?

时间:2011-09-14 12:41:35

标签: sql oracle

我想存储用户查看的最后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 个答案:

答案 0 :(得分:3)

您可以使用以下分析函数:

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
)