sql - 我可以在Redshift的窗口函数上添加条件吗?

标签 sql amazon-redshift window-functions

我在Redshift中有一个基于事件的表。我想将所有事件与系列中的FIRST事件相关联,前提是该事件在该事件之前的N小时内进行。

如果我只关心第一行,那么我会做:

SELECT
   event_time
   ,first_value(event_time) 
      OVER (ORDER BY event_time rows unbounded preceding) as first_time
FROM
   my_table

但是因为我只想将其与过去N个小时的第一场比赛联系在一起,所以我想要一些类似的东西:
SELECT
   event_time
   ,first_value(event_time) 
       OVER (ORDER BY event_time rows between [N-hours ago] and current row) as first_time
FROM
   my_table

在我 table 上的一点背景。它是用户的操作,因此用户可以有效跳入,执行1-100次操作然后离开。大多数用户每天1-10倍。 session 很少会持续一个小时以上,因此我可以将N设置为1。

如果我只是将PARTITION BY设置为date_trunc('hour',event_time),我将为整个小时内的 session 加倍创建。

假设my_table看起来像
id | user_id | event_time
----------------------------------
 1 |   123   | 2015-01-01 01:00:00
 2 |   123   | 2015-01-01 01:15:00
 3 |   123   | 2015-01-01 02:05:00
 4 |   123   | 2015-01-01 13:10:00
 5 |   123   | 2015-01-01 13:20:00
 6 |   123   | 2015-01-01 13:30:00

我的目标是获得看起来像
id | parent_id | user_id | event_time
----------------------------------
 1 |   1       |  123    | 2015-01-01 01:00:00
 2 |   1       |  123    | 2015-01-01 01:15:00
 3 |   1       |  123    | 2015-01-01 02:05:00
 4 |   4       |  123    | 2015-01-01 13:10:00
 5 |   4       |  123    | 2015-01-01 13:20:00
 6 |   4       |  123    | 2015-01-01 13:30:00

最佳答案

到目前为止,答案似乎是“否”。

在SQL Server中,有一个功能是在框架中使用RANGE而不是ROWS。这使查询可以将值与当前行的值进行比较。

https://www.simple-talk.com/sql/learn-sql-server/window-functions-in-sql-server-part-2-the-frame/

当我在Redshift中尝试这种语法时,出现错误“尚不支持范围”

当“还”更改时,有人更新此信息!

关于sql - 我可以在Redshift的窗口函数上添加条件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32750424/

相关文章:

sql - 一对多和多对一关系之间的区别

amazon-redshift - 为什么非 super 用户在 Redshift 中看不到 STL_load_errors 中的数据?

datetime - 如何将纪元转换为日期时间 Redshift ?

amazon-redshift - 如何向时间字段添加小时

mysql - SQL 窗口函数 - NTH_VALUE - 如果我们对前 n-1 行使用 Order by,为什么会返回 NULL

SQL 窗口函数 - SELECT DISTINCT ORDER BY LIMIT

mysql - 如何使用 DISTINCT 选择行的其余部分?

mysql - 为什么 SQL NOT EXISTS 返回所有 NULL 值的 1 条记录

MySQL 不在子查询中

sql - 聚合函数按顺序获取两行的差异或比率