0
Sample Data Set and Desired Query Result跟蹤更改在零售商店的所有權隨時間
我已經改變所有權隨着時間的推移零售店列表(由公司所擁有,對許可或專利及回公司所擁有)。我試圖追蹤每個所有權類型下每月開放的商店數量。對於所有權的每次更改,我在數據集中都有一個新的行項目,每個行項目都有相應的更改開始和結束日期。
我試圖根據所有權類型爲每個月的數據計算商店,並且我無法計算出所有權的開始日期和結束日期之間的所有月份的商店數。希望這張照片能夠清楚地表明我想要做什麼。
select
b.fscl_yr_num
,b.fscl_per_in_yr_num
,a.ownr_type_cd
,sum(case when a.line_start_dt < b.end_dt and a.line_end_dt <= b.End_Dt then 1 else 0 end)
from
(
(
select *
from
(select
store_num
,ownr_type_cd
,case when store_term_dt is not null then 'Closed' else 'Open' end as Status
,case when to_date(trim(store_open_dt),'DD-MON-YY') > to_date(trim(eff_from_dt),'DD-MON-YY') then to_date(trim(store_open_dt),'DD-MON-YY') else to_date(trim(eff_from_dt),'DD-MON-YY') end as Line_Start_Dt
,case when store_term_dt is null then eff_to_dt
when to_date(trim(store_term_dt),'DD-MON-YY') < to_date(trim(eff_to_dt),'DD-MON-YY') then to_date(trim(store_term_dt),'DD-MON-YY') else to_date(trim(eff_to_dt),'DD-MON-YY') end as Line_End_Dt
from
(select
store_num
,store_open_dt
,store_term_dt
,eff_from_dt
,eff_to_dt
,ownr_type_cd
from
appca.d_store_vers
where
upper(cntry_cd_2_dgt_iso) = 'GB'
and postal_cd not like ('BT%')
and store_open_dt is not null
group by
store_num
,store_open_dt
,store_term_dt
,eff_from_dt
,eff_to_dt
,ownr_type_cd
order by
store_num
,eff_from_dt)
group by
store_num
,ownr_type_cd
,case when store_term_dt is not null then 'Closed' else 'Open' end
,case when to_date(trim(store_open_dt),'DD-MON-YY') > to_date(trim(eff_from_dt),'DD-MON-YY') then to_date(trim(store_open_dt),'DD-MON-YY') else to_date(trim(eff_from_dt),'DD-MON-YY') end
,case when store_term_dt is null then eff_to_dt
when to_date(trim(store_term_dt),'DD-MON-YY') < to_date(trim(eff_to_dt),'DD-MON-YY') then to_date(trim(store_term_dt),'DD-MON-YY') else to_date(trim(eff_to_dt),'DD-MON-YY') end
order by
1 asc
,2 asc
,3 asc)
where
to_date(trim(line_start_dt),'DD-MON-YY') < to_date(trim(line_end_dt),'DD-MON-YY')
) A
right join
--Calendar Table--
(
select
fscl_yr_num, fscl_per_in_yr_num, Cal_dt min(to_date(trim(cal_dt),'DD-MON-YY')) as Start_Dt, max(to_date(trim(cal_dt),'DD-MON-YY')) as End_Dt
from
appca.d_cal
where
fscl_yr_num is between 1990 and 2018
group by
fscl_yr_num, fscl_per_in_yr_num
order by
1 asc, 2 asc
) B
on A.line_end_dt = B.cal_dt
)
group by
b.fscl_yr_num
,b.fscl_per_in_yr_num
,a.ownr_type_cd
order by
b.fscl_yr_num
,b.fscl_per_in_yr_num
;
請不要張貼鏈接的圖片。同時顯示你的嘗試。 – OldProgrammer
好吧,我想出了一張照片是顯示結果的最簡單/最乾淨的方法。 –
我修改了帖子以顯示我試過的代碼。但我真的只需要幫助在日期之間分配1到月份。 –