如何解决为什么在子查询中使用窗口函数时所有排名数字都变为1
我有一个表,该表在我的会话表中包含traffic_id,日期,start_time,session_id,页面,平台,页面浏览量,收入,segment_id和customer_id列。每个customer_id可以具有多个具有不同收入/日期/开始时间/页面/平台/ page_views / segment_id值的session_id。示例数据如下所示。
SELECT max(revenue),customer_id,date,session_id,session_sequence
FROM (
SELECT
revenue,RANK() OVER(partition by customer_id ORDER BY date,start_time ASC) AS session_sequence
FROM sessions
) AS a
group by customer_id
我想知道每个客户的最大会话收入和会话序列号,如下表所示。
{{1}}
我以为我可以使用子查询来完成这项工作。但是所有排名值均为1,session_id和date错误。请帮忙! - - - - - - - - - - - - - - - - - - - - - - - - ----------------------------------------
{{1}}
;
解决方法
您的查询应生成错误,因为GROUP BY
列和SELECT
列不一致。
大概您想要最大的收益以及出现的顺序号。
SELECT s.*
FROM (SELECT s.*,RANK() OVER (partition by customer_id ORDER BY date,start_time ASC) AS session_sequence,MAX(revenue) OVER (PARTITION BY customer_id) as max_revenue
FROM sessions
) s
WHERE revenue = max_revenue;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。