2016-11-28 43 views
0

我有一个表etl_control,它每天存储latest_idx_data表。现在我需要获取每天的行数。 我的想法是运行一个查询,根据日常条件x_data.id <= etl_control.latest_id获得计数并获得计数。在Redshift中id小于一系列值的行的查询计数

表结构如下。

etl_control:

record_date  | latest_id | 
--------------------------------- 
2016-11-01  | 55   | 
2016-11-02  | 125   | 
2016-11-03  | 154   | 
2016-11-04  | 190   | 
2016-11-05  | 201   | 
2016-11-06  | 225   | 
2016-11-07  | 287   | 

x_data:

id    | value  | 
--------------------------------- 
10    | xyz   | 
11    | xyz   | 
21    | xyz   | 
55    | xyz   | 
101    | xyz   | 
108    | xyz   | 
125    | xyz   | 
142    | xyz   | 
154    | xyz   | 
160    | xyz   | 
166    | xyz   | 
178    | xyz   | 
190    | xyz   | 
191    | xyz   | 

最终的结果应该在x_data的每一天的行数。我尝试了一些使用JOIN,WITH和COUNT(*)OVER的变体。但最大的障碍是迭代比较x_data.id和etl_control.latest_id。

回答

0

真的很抱歉的人。发布问题后自己得到答案。

该查询非常简单。

WITH data AS (
    SELECT e.latest_id 
    FROM x_data AS x, etl_control AS e 
    WHERE x.id <= e.latest_id) 
SELECT latest_id, count(*) FROM data GROUP BY latest_id; 

这基本上是为每行重复创建一个临时表,并重复latest_id。 latest_id始终大于或等于x_data中的id。

在这个临时表上的一个简单的组会得到预期的结果。