Vertica Analytic函数,用于计算窗口中的实例

时间:2019-06-17 21:01:24

标签: sql vertica

假设我有一个包含两列的数据集:IDtimestamp。我的目标是在任何30天的窗口中计算至少具有n个时间戳的返回ID。

这里是一个例子:

ID Timestamp
1  '2019-01-01'
2  '2019-02-01'
3  '2019-03-01'
1  '2019-01-02'
1  '2019-01-04'
1  '2019-01-17'

因此,假设我要返回一个在30天的时间范围内具有3个时间戳的ID的列表。

鉴于上面,我的结果集将只是ID =1。我在想某种窗口功能可以完成此任务,但我不是肯定的。

有没有机会您可以帮助我编写一个完成此任务的查询?

1 个答案:

答案 0 :(得分:1)

一种相对简单的方法涉及lag() / lead()

select t.*
from (select t.*,
             lead(timestamp, 2) over (partition by id order by timestamp) as timestamp_2
      from t
     ) t
where datediff(day, timestamp, timestamp_2) <= 30;

lag()查看系列中的第三个时间戳。 where检查是否在原始日期的30天内。结果是发生这种情况的行。

如果只需要id,则:

select distinct id
from (select t.*,
             lead(timestamp, 2) over (partition by id order by timestamp) as timestamp_2
      from t
     ) t
where datediff(day, timestamp, timestamp_2) <= 30;