HIVE/Impala查询:统计满足一定条件的行与行之间的行数

HIVE/Impala query: Count the number of rows between rows fulfilling certain conditions

我需要计算满足特定条件的行数,这些条件包含在由满足其他条件的其他行定义的间隔中。示例:满足条件 'Other_condition' = b 的 'Reference' 之间具有值 1 和 4 的行数 N 为 N=1,'Reference' 之间具有值 2 和 5 的行数 N满足条件 'Other_condition' = b is N=2 etc.

  Date          Reference    Other_condition
20171111            1              a
20171112            2              a   
20171113            3              b
20171114            4              b  
20171115            5              b

我正在通过 Hive/Impala SQL 查询访问数据库,不幸的是我不知道从哪里开始实施这样的 window 功能。我想要的半伪代码版本是这样的:

SELECT COUNT (DISTINCT database.Date) AS counter, Other_condition, reference
FROM database
WHERE database.Other_condition = a AND database.Reference BETWEEN 
(window function condition 1: database.Reference = 2) AND 
(window function condition 2: database.Reference = 5)
GROUP BY counter

你的问题比较难理解。我得到第一个条件,即“1”和“4”之间的行数。

这是一种应该很容易概括的方法:

select (max(case when reference = 4 then seqnum end) -
        max(case when reference = 1 then seqnum end)
       ) as num_rows_1_4
from (select t.*,
             row_number() over (order by date) as seqnum
      from t
     ) t;