查询 id 小于 Redshift 中一系列值的行数
query count of rows where id is less than a series of values in Redshift
我有一个 table etl_control
,每天存储 latest_id
个 x_data
table。现在我需要获取每天的行数。
我的想法是 运行 查询以根据条件 x_data.id <= etl_control.latest_id
获取每天的计数并获取计数。
table结构如下
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.
真的很抱歉伙计们。发布问题后自己得到了答案。
查询真的很简单
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;
这基本上创建了一个临时文件 table,每行重复 latest_id。 latest_id 总是大于或等于来自 x_data 的 id。
根据此温度 table 进行简单分组将给出预期的结果。
我有一个 table etl_control
,每天存储 latest_id
个 x_data
table。现在我需要获取每天的行数。
我的想法是 运行 查询以根据条件 x_data.id <= etl_control.latest_id
获取每天的计数并获取计数。
table结构如下
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.
真的很抱歉伙计们。发布问题后自己得到了答案。
查询真的很简单
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;
这基本上创建了一个临时文件 table,每行重复 latest_id。 latest_id 总是大于或等于来自 x_data 的 id。
根据此温度 table 进行简单分组将给出预期的结果。