如何从开始日期和 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
我在 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
请注意,可以使用...
创建此语句的测试 tabledeclare @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