SQL:确定事件是否发生?

时间:2018-11-16 11:33:23

标签: sql hive hiveql olap impala

我们有一个像这样的日期列:

Date            Expected Output
1-Jan-18           1
2-Jan-18           0
3-Jan-18           0
4-Jan-18           0
5-Jan-18           0
19-Jan-18          1
20-Jan-18          0
21-Jan-18          0
25-Jan-18          1
29-Jan-18          0
1-Feb-18           0
4-Feb-18           1
13-Feb-18          1
18-Feb-18          1
21-Feb-18          0
3-Mar-18           1
12-Mar-18          1

我正在尝试在impala / hive中编写查询,尝试使用超前/滞后窗口功能能够找到日期之间的差异,但是遇到识别事件的麻烦。

逻辑:事件显然会在开始日期发生,并且如果在开始日期和开始日期+ 5之间存在任何日期,则不会将其视为事件。日期也可能重复,试图提供一些具有预期输出的示例数据。无论我们在期望列中有1个位置,都是一个事件。我的逻辑似乎不起作用,尝试使用case语句和超前/滞后窗口函数。

1 个答案:

答案 0 :(得分:1)

您想要的结果似乎来自:

select t.*,
       (case when date >= lag(date) over (order by date) and
             date < date_add(lag(date) over (order by date), 5)
             then 0 else 1
        end) as flag
from t;