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

时间:2016-11-28 06:55:46

标签: amazon-redshift psql

我有一个表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进行比较。

1 个答案:

答案 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。

此临时表上的一个简单组将给出预期结果。