문제 설명
Redshift에서 id가 일련의 값보다 작은 행의 쿼리 수 (query count of rows where id is less than a series of values in Redshift)
매일 x_data
테이블의 latest_id
를 저장하는 etl_control
테이블이 있습니다. 이제 매일 행 수를 얻어야 하는 요구 사항이 있습니다. 내 생각은 매일 쿼리를 실행하여 x_data.id
x_data.id <= etl_control.latest_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와 반복적으로 비교하는 것입니다.
참조 솔루션
방법 1:
Really sorry folks. Got the answer myself after posting the question.
The query is really simple.
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;
This basically creates a temp table with latest_id repeated for each row. The latest_id is always greater than or equal to the id from x_data.
A simple group by on this temp table would give the expected result.
(by user1741851、user1741851)
참조 문서