我有一些网页浏览数据,其中每一行都是一个网页浏览,我希望从每个用户第二(以及任何后续)访问中查找网页浏览量;为了简单起见,我将使用一整天作为会话长度。我假设查询应该看起来像,
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;任何额外信息,例如第二次访问的日期时间都会很棒。)
答案 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;