获取上一个和下一个值计数

时间:2016-09-04 19:12:11

标签: sql amazon-redshift

我有一个包含一组事件的表。事件可以是搜索,点击,打开等。每行都有一个日期列。

我试图获取第一个事件是搜索的行数,然后点击下一个事件。有没有办法在红移中使用超前/滞后来实现这一目标?

它抛出了一个错误,即聚合函数调用可能没有嵌套函数

count(CASE WHEN lead(trim(lower(event)), 1)
                  OVER (
                    ORDER BY timevalue :: TIMESTAMP ASC) = 'click' AND trim(lower(event)) = 'search'
    THEN 1
        ELSE NULL END)              AS my_column,

1 个答案:

答案 0 :(得分:0)

我希望您的代码能够使用子查询工作。我会把它写成:

select count(*)
from (select t.*,
             lead(event) over (order by timevalue) as next_event
      from t
     ) t
where event = 'search' and next_event = 'click';

我不希望lower()trim()是必要的,但如果您的数据非常脏,则可能是。

注意:您不能将窗口函数作为参数添加到聚合函数中,因此您需要使用子查询。