2017-03-22 1 views
2

prestodbには、start_dateフィールドとインクリメンタルカウンタを持つこの種のテーブルがあります。私はprestosqlを使用して、テーブルのこの種に変換するにはどうすればよい開始日から日付範囲行を作成する方法とPrestodb SQLの数値を作成する方法は?

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

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

ありがとう!

答えて

1
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 
+0

おかげで...テストテーブルに対してメインの文を実行した結果を示しています!しかし、それは、prestoバージョン0.157以降(シーケンス関数のため)のみ動作することに注意する必要があります。 – mitbal

+0

実際には、 'sequence'がバージョン0.147 https://prestodb.io/docs/current/release/release-0.147.html P.s.に追加されました。 「Presto 0.174 Documentation」の0.174と「11.32」の0.147を混同しないでください。 Release 0.147' :-) –

-1

の名前と主な声明で@tを交換してください

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) 

...この文のテストテーブルを使用して作成することができますので、予めご了承ください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 

のためにこれを試してみてくださいあなたのテーブルに対してメインステートメントをテストするときにあなたのテーブル。

次の画像は、

enter image description here

関連する問題