如何从开始日期和 Prestodb SQL 中的数字创建日期范围行?

How to create date range row from start date and a number in Prestodb SQL?

我在 prestodb 中有这种 table,它有一个 start_date 字段和一个增量计数器。

| num | start_date | val |
|-----|------------|-----|
| 2   | 2017-03-01 | 100 |
| 3   | 2017-03-05 | 233 |

如何使用 presto sql 将其转换为这种 table?

| date       | val |
|------------|-----|
| 2017-03-01 | 100 |
| 2017-03-02 | 100 |
| 2017-03-05 | 233 |
| 2017-03-06 | 233 |
| 2017-03-07 | 233 |

谢谢!

Sql Server

试试这个
Declare @s_id int = 1
;WITH dates AS 
(
    SELECT start_date as Date,@s_id as times,num as value,val
    from  @t 
    UNION ALL
    SELECT DATEADD(d,1,[Date]),times+1 as times,value,val
    FROM dates 
    WHERE times  < value
)

select Date,val from dates
order by val,date

请注意,可以使用...

创建此语句的测试 table
declare @t ( num int,start_date date,val int)
insert into @t values (2,'2017-03-01',100)
insert into @t values (3,'2017-03-05',233)

在针对您的 table.

测试主语句时,请将主语句中的 @t 替换为您的 table 的名称

下图显示了 运行 主语句对测试 table...

的结果

select  date_add ('day',s.n,t.start_date) as date
       ,t.val 

from    mytable t 
        cross join unnest(sequence(0,num-1)) s (n)
;

    date    | val
------------+-----
 2017-03-01 | 100
 2017-03-02 | 100
 2017-03-05 | 233
 2017-03-06 | 233
 2017-03-07 | 233