我有一个表etl_control
,每天存储latest_id
x_data
个表。现在我需要获取每天的行数。
我的想法是运行查询以根据每天的条件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进行比较。
答案 0 :(得分: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。
此临时表上的一个简单组将给出预期结果。