update fw_ods.fw_ods_monthly ods 
set d4l1_date = new_date,
d4l1_yyyy = new_year,
d4l1_qq = new_quarter,
d4l1_mm = new_month,
d4l1_yyyymm = new_yyyymm::int,
update_timestamp = now() 
from  
(
with tbl_results as (
with tbl as (
select date_trunc('month', max(d4l1_date))::date max_d4l1 from fw_ods.fw_ods_monthly where client_id = 10
)
select (EXTRACT(year FROM age(now(),max_d4l1))*12 + EXTRACT(month FROM age(now(),max_d4l1))-1) num_month  from tbl
)

select distinct d4l1_date, (d4l1_date + num_month * interval '1 months')::date new_date, 
date_part('year', (d4l1_date + num_month * interval '1 months')::date) new_year,
date_part('quarter', (d4l1_date + num_month * interval '1 months')::date) new_quarter,
date_part('month', (d4l1_date + num_month * interval '1 months')::date) new_month,
concat(date_part('year', (d4l1_date + num_month * interval '1 months')::date),lpad(date_part('month', (d4l1_date + num_month * interval '1 months')::date)::varchar,2,'0')) new_yyyymm
from fw_ods.fw_ods_monthly  a, tbl_results b where client_id = 10
) new 
where ods.d4l1_date = new.d4l1_date and ods.client_id = 10;

/* update fw_ods_viz_data_generic data excluding waterfall data */

update fw_ods.fw_ods_viz_data_generic ods 
set from_date = new_date_from,
to_date = new_date_to,
update_timestamp = now() 
from 
(
with tbl_results as (
with tbl as (
select date_trunc('month', max(from_date))::date max_d4l1 from fw_ods.fw_ods_viz_data_generic where client_id = 10 and viztype_name <> 'Waterfall'
)
select (EXTRACT(year FROM age(now(),max_d4l1))*12 + EXTRACT(month FROM age(now(),max_d4l1))-1) num_month  from tbl
)

select distinct from_date, to_date,
(from_date + num_month * interval '1 months')::date new_date_from,
(to_date + num_month * interval '1 months')::date new_date_to
from fw_ods.fw_ods_viz_data_generic  a, tbl_results b where client_id = 10 and viztype_name <> 'Waterfall'
) new 
where ods.from_date = new.from_date and ods.to_date = new.to_date and ods.client_id = 10 and viztype_name <> 'Waterfall';

/* update waterfall data */

update fw_ods.fw_ods_viz_data_generic ods 
set from_date = new_date_from,
to_date = new_date_to,
update_timestamp = now() 
from 
(
with tbl_results as (
with tbl as (
select date_trunc('month', max(from_date))::date max_d4l1 from fw_ods.fw_ods_viz_data_generic where client_id = 10 and viztype_name= 'Waterfall'
)
select (EXTRACT(year FROM age(now(),max_d4l1))*12 + EXTRACT(month FROM age(now(),max_d4l1))-1) num_month  from tbl
)
select distinct from_date, to_date,
(from_date + num_month * interval '1 months')::date new_date_from,
(to_date + num_month * interval '1 months')::date new_date_to
from fw_ods.fw_ods_viz_data_generic  a, tbl_results b where client_id = 10 and viztype_name= 'Waterfall'
) new 
where ods.from_date = new.from_date and ods.to_date = new.to_date and ods.client_id = 10 and viztype_name= 'Waterfall';

update fw_ods.fw_ods_viz_data_generic ods 
set va1 = concat(EXTRACT(year FROM from_date),'-', lpad(EXTRACT(month FROM from_date)::text,2,'0')),
va2 = concat(EXTRACT(year FROM (from_date - 1 * interval '1 months')::date),'-', lpad(EXTRACT(month FROM (from_date - 1 * interval '1 months')::date)::text,2,'0'))
where client_id =10 and viztype_name= 'Waterfall';

update fw_core.fw_jobctl_runschedule_jobstep set end_status_note ='retail_update_completed', end_status='success',end_time = now() where job_script_type = 'sql' and latest_runschedule_flag='1' and job_name= 'Retail Data Update';
