Sql 配置单元/黑斑羚查询:计算满足特定条件的行之间的行数

Sql 配置单元/黑斑羚查询:计算满足特定条件的行之间的行数,sql,database,hiveql,impala,Sql,Database,Hiveql,Impala,我需要计算满足其他条件的其他行定义的间隔中包含的满足特定条件的行数。示例:满足条件“其他条件”=b的值为1和4的“引用”之间的行数N为N=1,满足条件“其他条件”=b的值为2和5的“引用”之间的行数N为N=2,以此类推 Date Reference Other_condition 20171111 1 a 20171112 2 a 20171113

我需要计算满足其他条件的其他行定义的间隔中包含的满足特定条件的行数。示例:满足条件“其他条件”=b的值为1和4的“引用”之间的行数N为N=1,满足条件“其他条件”=b的值为2和5的“引用”之间的行数N为N=2,以此类推

  Date          Reference    Other_condition
20171111            1              a
20171112            2              a   
20171113            3              b
20171114            4              b  
20171115            5              b
我通过Hive/Impala SQL查询访问数据库,不幸的是,我不知道从哪里开始实现这样的窗口函数。我想要的半伪代码版本是这样的:

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;

您能发布这两个查询的预期输出吗?特别是我不理解部分
条件'Other_condition'=b是一个
@RadimBača我已经编辑了这个问题,希望现在能更清楚一点。一位同事向我展示了如何解决这个问题,但我需要花一些时间来理解代码,然后才能在这里提供一个明确的答案。因此,您正在寻找每个组满足以下条件的组数:您在参考列中有一个
b
值介于1和4之间的行?@RadimBačA。