我想跟踪用户在 PostgreSQL 数据库中查看的最后 n 个项目。我的第一个想法是创建一个表,例如
CREATE TABLE history (
id SERIAL PRIMARY KEY,
user_id integer REFERENCES users (id),
item_id integer REFERENCES items (id),
view_date timestamp DEFAULT current_timestamp
);
当用户查看一个对象时,history
表中的一个新行将记录这次查看。但我只需要为每个用户维护最后的 n 个 View ,这种方法将存储曾经出现的每个 View 。
是否有一种有效的方法可以定期删除所有用户最近超过 n 的条目?
编辑:如果有比使用 SQL 表更好的方法来存储这些数据,我很想听听。
最佳答案
delete from history
where id in (
select id
from (
select
id,
row_number() over(
partition by user_id
order by view_date desc
) as rn
from history
) s
where rn > n
)
关于sql - 如何在关系数据库中维护每个用户最近查看的 N 个项目的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24269742/