2016-11-28 6 views
0

У меня есть таблица etl_control, в которой хранится latest_id из x_data таблица повседневная. Теперь у меня есть требование получить количество строк за каждый день. Моя идея - запустить запрос, чтобы получить счет на основе состояния 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; 

Это в основном создает временную таблицу с last_id, повторяющуюся для каждой строки. Функция last_id всегда больше или равна id из x_data.

Простая группа по этой временной таблице даст ожидаемый результат.