2017-06-09 71 views
1

我想創建一個表有問題。 我有一個商店每天銷售額爲每家商店累計銷售額的表格。這意味着如果商店在特定的日子沒有銷售,那麼這個觀察就不存在了。如何獲得沒有銷售的商店的零觀察時間軸

我想要的是每個店鋪每天的生產線,也是店鋪沒有任何銷售的日子,在這種情況下,每日銷售額只是零。

我試着在每日的generate_series和上面提到的表格之間做一個完整的外連接。

select 
    timeline::date as date, 
    store_rev.store_name, 
    store_rev.store_daily_rev 
FROM generate_series(
    '2017-03-01', 
    now(), 
    '1 day') AS timeline 
FULL OUTER JOIN(select 
       r.date, 
       r.store_name, 
       r.store_daily_rev, 
       FROM revenue r) store_rev ON timeline.date=store_rev.date 

但是,如果商店沒有任何銷售,這不會給我一排零。 希望你們能幫助我。謝謝!

回答

0

你確定表revenuedate是類型DATE

我modifited您的查詢,試試這個:

select 
    timeline::date as date, 
    store_rev.store_name, 
    store_rev.store_daily_rev 
from 
(
    select 
    timeline::date as date 
    from 
    generate_series('2017-03-01', now(),'1 day') AS timeline 
) timeline 
JOIN(select 
    r.date, 
    r.store_name, 
    r.store_daily_rev, 
    FROM revenue r) store_rev ON timeline.date::date = store_rev.date::date; 
+0

你需要一個'left join'而不是內部連接 –

0

我想你想一個cross join後跟一個left join。這將讓所有的組合:

select timeline.date, s.store_name, 
     coalesce(r.store_daily_rev, 0) as store_daily_rev 
from generate_series('2017-03-01', now(), '1 day') as timeline(date) cross join 
    (select distinct r.store_name from revenue r) s left join 
    revenue r 
    on r.store_name = s.store_name and r.date = timeline.date; 

cross join產生的所有行(日期和門店的組合)。 left join爲商店/日期帶來收入值。

+0

這是有效的。真棒!千萬不要過去交叉加入,但這正是我所需要的。太酷了,非常感謝! – Jonas