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;
我需要计算满足特定条件的行数,这些条件包含在由满足其他条件的其他行定义的间隔中。示例:满足条件 '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;