【问题标题】:SQL most recent using row_number() over partitionSQL 最近在分区上使用 row_number()
【发布时间】: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 成功了。谢谢!

标签: sql hive


【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-16
      • 1970-01-01
      • 2013-10-02
      • 2017-07-31
      • 2014-05-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多