table:
会议
会话\n
访客id
垂直的
会话\u id
交易
会话\n
会话\u id
rev\铲斗
收入
当前有以下查询(使用sqlite):
SELECT
visitor_id,
session_id,
running_total
FROM
(
SELECT
s.visitor_id,
s.session_id,
t.revenue,
ROW_NUMBER() OVER(PARTITION BY s.visitor_id ORDER BY t.session_ts) as row_num,
SUM(revenue) OVER(PARTITION BY s.visitor_id) as running_total
FROM sessions s
JOIN transactions t
ON s.session_id = t.session_id
WHERE s.session_ts >= '2020-01-01' AND s.session_ts < '2020-02-01'
) sub
Where running_total = 0
AND row_num >= 2
示例表的结果:
欢迎任何反馈,提前谢谢。不确定上述查询是否正确。还想知道我是否可以为每个访问者显示单独的会话id,如下所示:
2条答案
按热度按时间jvlzgdj91#
我假设一次会议就是一次访问。那就是:
wa7juj8i2#
如果没有负面的交易,除了你没有把
order by
所以你需要修正。虽然您在别名中称之为运行总数,但它实际上根本没有运行。不确定这是否是命名或实现的混乱。如果您按美元的相反顺序排序,使非零行显示在第一行,那么当您到达第二行并且运行总数仍然为零时,那么您的访问将处于正确的轨道上,那么这个访问者必须确实符合条件。但这有点迂回。为了让游客们独处,我觉得用一个简单的
group by
去做这项工作。这是我的建议:但既然您希望保留会话ID,那么您毕竟需要分析函数:
把零美元列作为输出没有明确的目的,这就是为什么我把它们漏掉了。您甚至可能不需要该行号列,但请注意它现在位于外部查询中。
如果负收入是可能的,那么一笔款项将不总是工作。请考虑比较这两个值是否相等:
和