0
我輸入表這種結構:與起始日期間填充天添加列日期和結束日期
acct_id pvt_data_id pvt_pref_ind start_dttm end_dttm load_dttm pr_load_time
4174878 26 Y 20101126144142 99991231235959 20170527000000 2017052700
4174878 26 Y 20101126144142 99991231235959 20170528000000 2017052800
4174878 26 Y 20101126144142 99991231235959 20170530000000 2017053000
3212472 26 X 20131016144142 99991231235959 20170531000000 2017053100
4174878 26 Y 20101126144142 99991231235959 20170601000000 2017060100
3212472 26 X 20091201142148 99991231235959 20170602000000 2017060200
林應該採取此表並創建一個新的額外的列pr_day
,這將有整數值一天(例如20170814
)的範圍在start_dttm
和end_dttm
之間,因此該範圍內每天都會有一行。
我開始與以下查詢來獲取對每個組(由第一3列)的範圍
select
acct_id,
pvt_data_id,
pvt_pref_ind,
cast(min(substr(cast(start_dttm as string),1,8)) as bigint),
max(case when end_dttm=99991231235959 then cast(from_unixtime(unix_timestamp(now()),'yyyyMMdd') as bigint) when end_dttm is null then cast(from_unixtime(unix_timestamp(now()),'yyyyMMdd') as bigint) else end_dttm end)
from table1
group by acct_id, pvt_data_id,pvt_pref_ind
注意:值99991231235959或null表示當天應作爲END_DATE。
現在我不知道如何繼續,尋找指導我做一個交叉連接來填充日期,但我應該加入表中的什麼?
所需的輸出會是這樣的:
acct_id pvt_data_id pvt_pref_ind start_dttm end_dttm load_dttm pr_load_time pr_day
4174878 26 Y 20101126144142 99991231235959 20170527000000 2017052700 20101126
4174878 26 Y 20101126144142 99991231235959 20170528000000 2017052800 20101127
4174878 26 Y 20101126144142 99991231235959 20170529000000 2017052900 20101128
4174878 26 Y 20101126144142 99991231235959 20170530000000 2017053000 20101129
3212472 26 X 20131016144142 99991231235959 20170531000000 2017053100 20091202
4174878 26 Y 20101126144142 99991231235959 20170601000000 2017060100 20101130
3212472 26 X 20091201142148 99991231235959 20170602000000 2017060200 20091201¨
感謝的提示和幫助。
感謝,我測試它並讓你知道! –