我有一个任意日期的列表。我想扩展该列表以包括每个日期之后的六天。我正在使用 Starburst/Trino SQL。
例如,给定以下日期表(我们将该表称为开始日期)。
arbitrary_date
1/5/2023
2/23/2023
4/6/2023
5/11/2023
6/15/2023
我想要以下输出表。
expanded_dates
1/5/2023
1/6/2023
1/7/2023
1/8/2023
1/9/2023
1/10/2023
1/11/2023
2/23/2023
2/24/2023
2/25/2023
2/26/2023
2/27/2023
2/28/2023
3/1/2023
4/6/2023
4/7/2023
4/8/2023
4/9/2023
4/10/2023
4/11/2023
4/12/2023
5/29/2023
5/30/2023
5/31/2023
6/1/2023
6/2/2023
6/3/2023
6/4/2023
7/15/2023
7/16/2023
7/17/2023
7/18/2023
7/19/2023
7/20/2023
7/21/2023
我的糟糕解决方案如下。
CREATE TABLE alldates AS
SELECT arbitrary_date AS date0,
arbitrary_date + INTERVAL '1' DAY AS date1,
arbitrary_date + INTERVAL '2' DAY AS date2,
arbitrary_date + INTERVAL '3' DAY AS date3,
arbitrary_date + INTERVAL '4' DAY AS date4,
arbitrary_date + INTERVAL '5' DAY AS date5,
arbitrary_date + INTERVAL '6' DAY AS date6
FROM startdates
;
然后,使用上表...
SELECT new_date FROM
(
SELECT date0 AS new_date FROM alldates
UNION
SELECT date1 AS new_date FROM alldates
UNION
SELECT date2 AS new_date FROM alldates
UNION
SELECT date3 AS new_date FROM alldates
UNION
SELECT date4 AS new_date FROM alldates
UNION
SELECT date5 AS new_date FROM alldates
UNION
SELECT date6 AS new_date FROM alldates
)
;
这显然“有效”,但如果我想要 10 天怎么办?还是20天?还是一个月?
有了两个“书结束”日期,我可以使用以下方法获取表格,但是当我在表格中有“书结束”日期或开始日期列表时,我不知道如何应用它。
SELECT * FROM UNNEST(SEQUENCE(date'2023-02-07', date'2023-02-13', INTERVAL '1' DAY)) AS t1(new_date);
new_date
2023-02-07
2023-02-08
2023-02-09
2023-02-10
2023-02-11
2023-02-12
2023-02-13
sequence
+ unnest
(注意 unnest
的简洁语法)是可行的方法,使用日期计算来创建第二个边界:
-- sample data
WITH dataset(arbitrary_date) AS (
values (date '2023-01-05'),
(date '2023-02-23')
)
-- query
select d
from dataset
,unnest (sequence(arbitrary_date, arbitrary_date + interval '6' day, interval '1' day)) as t(d);
输出:
d |
---|
2023-01-05 |
2023-01-06 |
2023-01-07 |
2023-01-08 |
2023-01-09 |
2023-01-10 |
2023-01-11 |
2023-02-23 |
2023-02-24 |
2023-02-25 |
2023-02-26 |
2023-02-27 |
2023-02-28 |
2023-03-01 |