SQL windows 函数 LEAD/LAG 但只考虑某些值?
Posted
技术标签:
【中文标题】SQL windows 函数 LEAD/LAG 但只考虑某些值?【英文标题】:SQL windows functions LEAD/LAG but only taking certain values into account? 【发布时间】:2021-05-23 15:52:47 【问题描述】:假设您有一个应用,并且想知道每次安装是否可以归因于新用户或回访用户。 因此,您要检查每个安装的 ID 是否有登录或注册事件,以较早者为准。 你会如何从左桌走到右桌? 如果我可以说,使用窗口函数会很容易:
LAG(event,1) OVER (PARTITION BY id ORDER by event_timestamp)
+但跳过“安装”事件,跳过它们
【问题讨论】:
用您正在使用的数据库标记您的问题。 添加了 presto,谢谢 【参考方案1】:你会使用lead(ignore nulls)
:
select t.*
from (select t.*,
lead(case when event <> 'install' then event end ignore nulls) over (partition by id order by timestamp) as next_event
from t
) t
where event = 'install';
ignore nulls
选项是标准 SQL。但是,并非所有数据库都支持它。此类数据库中通常还有其他选项,但没有数据库标记,建议使用标准 SQL。
【讨论】:
@Chris。 . . Presto 应该支持ignore nulls
选项。
你能举个例子吗?我查了一下,确实不明白。因此,在上面的示例中,我希望显示所有 ID=234,我不想仅仅因为下一个事件是“安装”而删除前 2 个实例。感谢您的帮助!
@Chris。 . .下一个事件与过滤无关。
@ Gordon Linoff prestodb.io/docs/current/functions/window.html 领导(事件 '安装' 然后事件结束时忽略 NULLS 情况)?不好意思,presto官方文档没有例子,我也没见过这个
@Chris。 . .查看“值”函数或只搜索ignore nulls
。以上是关于SQL windows 函数 LEAD/LAG 但只考虑某些值?的主要内容,如果未能解决你的问题,请参考以下文章
Snowflake SQL 错误 - 函数“-”的参数类型无效:(TIMESTAMP_NTZ(9), TIMESTAMP_NTZ(9))