SQL 最近在分区上使用 row_number()
Posted
技术标签:
【中文标题】SQL 最近在分区上使用 row_number()【英文标题】:SQL most recent using row_number() over partition 【发布时间】:2014-12-10 13:57:17 【问题描述】:我正在处理一些网络点击数据,我只是在寻找最近的 page_name 以及访问的 user_id(按时间戳)。使用下面的代码,重复 user_id 并显示 page_name,并按降序排列。但是,我希望 recent_click 始终 = 1。完成时的查询将用作更大查询中的子查询。
这是我当前的代码:
SELECT user_id,
page_name,
row_number() over(partition by session_id order by ts desc) as recent_click
from clicks_data;
user_id | page_name | recent_click
--------+-------------+--------------
0001 | login | 1
0001 | login | 2
0002 | home | 1
【问题讨论】:
请显示样本数据@Kraut 您可以将查询移动到子查询中并添加where recent_clicks = 1
。
@sgeddes 成功了。谢谢!
【参考方案1】:
您应该能够将查询移动到子查询并添加where
条件:
SELECT user_id, page_name, recent_click
FROM (
SELECT user_id,
page_name,
row_number() over (partition by session_id order by ts desc) as recent_click
from clicks_data
) T
WHERE recent_click = 1
【讨论】:
【参考方案2】:您应该将row_number()
函数移动到子查询中,然后在外部查询中对其进行过滤。
像这样的:
SELECT * FROM (
SELECT
[user_id]
,[page_name]
,ROW_NUMBER() OVER (PARTITION BY [session_id]
ORDER BY [ts] DESC) AS [recent_click]
FROM [clicks_data]
)x
WHERE [recent_click] = 1
【讨论】:
以上是关于SQL 最近在分区上使用 row_number()的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server:row_number 分区不重置计数器