2016-11-28 4 views
0

私は毎日x_dataテーブルのlatest_idを格納するテーブルetl_controlを持っています。今では、毎日の行数を取得する必要があります。 私の考えは、毎日の条件x_data.id <= etl_control.latest_idに基づいてカウントを取得し、カウントを取得するクエリを実行することです。idがRedshiftの一連の値よりも小さい行のクエリ数

表の構造は次のとおりです。

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以上です。

この一時表で単純なグループを使用すると、予期した結果が得られます。

関連する問題