SQL windows函数超前/滞后,但仅考虑某些值?

SQL windows函数超前/滞后,但仅考虑某些值?,sql,window-functions,presto,Sql,Window Functions,Presto,假设您有一个应用程序,并且想知道每次安装是否可以归因于新用户或返回的用户。 因此,您需要检查每个安装ID的用户是否在以后有登录或注册事件,以较早者为准。 你们怎么从左桌转到右桌? 如果我可以说,使用窗口功能将很容易: LAG(event,1) OVER (PARTITION BY id ORDER by event_timestamp) +但是跳过“安装”事件,跳过它们 您将使用leadignore空值: 忽略空值选项是标准SQL。但是,并非所有数据库都支持它。这类数据库中通常还有其他

假设您有一个应用程序,并且想知道每次安装是否可以归因于新用户或返回的用户。 因此,您需要检查每个安装ID的用户是否在以后有登录或注册事件,以较早者为准。 你们怎么从左桌转到右桌? 如果我可以说,使用窗口功能将很容易:

 LAG(event,1) OVER (PARTITION BY id ORDER by event_timestamp)   
+但是跳过“安装”事件,跳过它们

您将使用leadignore空值:


忽略空值选项是标准SQL。但是,并非所有数据库都支持它。这类数据库中通常还有其他选项,但如果没有数据库标记,建议使用标准SQL。

用您正在使用的数据库标记您的问题。添加presto,thanksah谢谢,这是prestoSQL@Chris . . . 普雷斯托应该支持忽略空值选项。你能举个例子吗?我查了一下,真的不明白。因此,在上面的示例中,我希望显示所有ID=234,我不希望删除前2个实例,因为下一个事件是“install”。我感谢你的帮助@克里斯。下一个事件与筛选无关。@Gordon Linoff leadIGNORE NULLS在事件“install”时的大小写,然后事件结束?很抱歉,官方的presto文档中没有示例,我从未见过这样的示例
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';