如何获取值大于该组的最小值加上常量的行?

时间:2016-01-03 06:11:11

标签: hive hiveql

我有一些网页浏览数据,其中每一行都是一个网页浏览,我希望从每个用户第二(以及任何后续)访问中查找网页浏览量;为了简单起见,我将使用一整天作为会话长度。我假设查询应该看起来像,

SELECT date_time, url FROM pageviews WHERE date_time > date_add(min(date_time), 1)

当然,min函数实际上并不存在,我需要每个访问者的最小日期时间,而不是整个表格。

我查看了其他一些问题,看起来窗口和分析功能可能是正确的选择,但文档很少,我无法找到如何在任何地方使用的单个示例。 / p>

以下查询

SELECT user_id, date_time, rank() OVER(PARTITION BY user_id ORDER BY date_time) FROM pageviews

返回按时间排序的综合浏览量列表,因此技术上我可以为每个user_id取一个等于1的那个,但我无法弄清楚如何做到这一点。似乎不可能在WHERE中使用OVER子句。

示例数据:

date_time                url                   user_id 
12-21-2015 00:00:07      www.mywebsite.com          1234
12-13-2015 14:12:02      www.mywebsite.com          5678
12-16-2015 23:24:25      www.mywebsite.com          5678

期望的结果

user_id   
5678     

(我至少需要用户ID;任何额外信息,例如第二次访问的日期时间都会很棒。)

1 个答案:

答案 0 :(得分:0)

使用子查询:

 FROM  ( SELECT 
     user_id, 
     date_time,  
     rank()   OVER(PARTITION BY user_id ORDER BY date_time) as rnk 
 FROM pageviews ) t  select user_id where rnk > 1;