【发布时间】:2020-08-01 22:22:05
【问题描述】:
我正在使用 Redshift 中的一个表。它包含带有一些信息和两个日期(开始日期和结束日期)的行。我似乎无法找到一种方法来为开始日期和结束日期之间的每一天创建一个新行。例如,这里的代码制作一个简单的表格:
CREATE TEMPORARY TABLE dates (name VARCHAR(50), start_date DATETIME, end_date DATETIME)
INSERT INTO dates
VALUES
('Peter F.','2018-03-01','2018-03-05'),
('Sam R.','2018-04-17', '2018-04-20');
SELECT * FROM dates;
我该怎么走
name | start_date | end_date |
Peter F. | 2018-04-17 00:00:00.000000| 2018-04-20 00:00:00.000000 |
Sam R. | 2018-03-01 00:00:00.000000| 2018-03-05 00:00:00.000000 |
到:
name | start_date | end_date |
Peter F. | 2018-04-17 00:00:00.000000| 2018-04-20 00:00:00.000000 |
Peter F. | 2018-04-18 00:00:00.000000| 2018-04-20 00:00:00.000000 |
Peter F. | 2018-04-19 00:00:00.000000| 2018-04-20 00:00:00.000000 |
Peter F. | 2018-04-20 00:00:00.000000| 2018-04-20 00:00:00.000000 |
Sam R. | 2018-03-01 00:00:00.000000| 2018-03-05 00:00:00.000000 |
Sam R. | 2018-03-02 00:00:00.000000| 2018-03-05 00:00:00.000000 |
Sam R. | 2018-03-03 00:00:00.000000| 2018-03-05 00:00:00.000000 |
Sam R. | 2018-03-04 00:00:00.000000| 2018-03-05 00:00:00.000000 |
Sam R. | 2018-03-05 00:00:00.000000| 2018-03-05 00:00:00.000000 |
我尝试使用这样的递归 CTE:
WITH cte
AS (SELECT name,
start_date,
end_date
FROM dates
UNION ALL
SELECT name,
Dateadd(day, 1, start_date),
end_date
FROM cte
WHERE start_date < end_date)
SELECT *
FROM cte
但它给了我一个错误:
[Amazon](500310) Invalid operation: relation "cte" does not exist;
希望得到一些专家的建议,因为我真的很希望能够在 SQL 中做到这一点......提前谢谢你!
【问题讨论】:
标签: sql date amazon-redshift recursive-query