如何在任意日期列表中的每个日期之外扩展六天?

问题描述 投票:0回答:1

我有一个任意日期的列表。我想扩展该列表以包括每个日期之后的六天。我正在使用 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
sql datetime sequence presto trino
1个回答
0
投票

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
© www.soinside.com 2019 - 2024. All rights reserved.