2010-12-20 33 views
14

Sorguma bir tarih aralığı uyguladığımda, bu tarihlerde veri olmasa bile tarih aralığındaki tarihleri ​​görüntülemek için var mıdır? Bu tarihten ve aynı yönelik hiçbir veri olmasa daPostgreSQL içinde tarih aralığı

kullandığım varsayalım,

... where date between '1/12/2010' and '31/12/2010' order by date 

Ne benim sonuç istediğiniz o gün 1/12/2010 kadar tüm miktar sütununun toplamını göstermektir 31/12/2010 için.

cevap

26

Boşlukları doldurmak için generate_series() ile katılın.

Örnek:

CREATE TEMP TABLE foo AS SELECT CURRENT_DATE AS today; 
SELECT 
    COUNT(foo.*), 
    generate_series::date 
FROM 
    foo 
     RIGHT JOIN generate_series('2010-12-18', '2010-12-25', interval '1 day') ON generate_series = today 
GROUP BY 
    generate_series; 

Sonuç:

0,'2010-12-18' 
0,'2010-12-19' 
1,'2010-12-20' 
0,'2010-12-21' 
0,'2010-12-22' 
0,'2010-12-23' 
0,'2010-12-24' 
0,'2010-12-25' 
İlgili konular