[英]How can I Select N most recent rows with unique column values
我需要执行查询以从表中检索N个(在本例中为4个)最新行,这些行在特定列上均具有不同的值。
该表是一个印象表,我需要从中检索用户访问过的4个唯一的最新页面,并由page_id colun标识。 我的主要问题出现在用户连续访问同一页面的情况下,因此如果我执行的是天真的话
SELECT page_id
FROM impressions
WHERE user_id = ####
ORDER BY created_at DESC
LIMIT 4;
我最终得到了重复的价值观。
我在这里偶然发现了一个答案,我似乎再也找不到了,它建议使用我尝试过的窗口函数
SELECT page_id, DENSE_RANK() OVER(ORDER BY page_id) as rnk
FROM impressions
WHERE user_id = ####
ORDER BY created_at DESC;
哪个产生或多或少我想要的,得到以下结果:
page_id | rnk
-----------+-----
325 | 10
325 | 10
524 | 20
235 | 5
235 | 5
524 | 20
524 | 20
524 | 20
524 | 20
524 | 20
524 | 20
524 | 20
524 | 20
524 | 20
524 | 20
524 | 20
524 | 20
524 | 20
499 | 13
499 | 13
问题是如何从这里开始,也许以这个查询为起点,我最终会得到类似
page_id | rnk
-----------+-----
325 | 10
524 | 20
235 | 5
499 | 13
您可以使用group by
:
SELECT page_id
FROM impressions
WHERE user_id = ####
GROUP BY page_id
ORDER BY MAX(created_at) DESC
LIMIT 4;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.