查询 id 小于 Redshift 中一系列值的行数

query count of rows where id is less than a series of values in Redshift

我有一个 table etl_control,每天存储 latest_idx_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 进行简单分组将给出预期的结果。