2016-11-28 55 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。

在這個臨時表上的一個簡單的組會得到預期的結果。