我需要执行查询以从表中检索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
答案 0 :(得分:0)
您可以使用group by
:
SELECT page_id
FROM impressions
WHERE user_id = ####
GROUP BY page_id
ORDER BY MAX(created_at) DESC
LIMIT 4;