2014-04-01 2 views
0

Я столкнулся со следующей проблемой:SQL даты запрос показать несуществующие дни

мне нужно запросить базу данных Postgres для полных загрузок каждого дня, начиная с 2008 года, как

date | downloads 1-1-2008 | 20 3-1-2008 | 10

реальная проблема заключается в том, что я не каждый элемент для каждого дня, но мне также нужны дни, когда загрузки были равны нулю.

Решение, которое выполняется сейчас, состоит в том, чтобы иметь другую таблицу с каждой датой от 1-1-2008 до 1-1-2018.

И право вступления в него на каждый диапазон дат ориентированном запрос ....

является то, что наилучшим образом?

ответ

2

сделать right join к generate_series таблице

select s.d 
from 
    downloads d 
    right join 
    (
     select d::date 
     from 
     generate_series('2008-01-01', current_date, interval '1 day') s(d) 
    ) s on s.d = d.d 
+0

Ok решение кажется более чистым, не имея иметь SATIC таблицу все время, Тхо не то же самое или худший показатель мудрым? Поскольку вы все еще правы, присоединяетесь к «таблицам», и на этом решении данные генерируются для каждого запроса? –

+1

@Eduardo Я предполагаю, что дешевле генерировать данные, чем запрашивать их из файловой системы. Он также намного более гибкий, поскольку он применяется не только к последовательным дням, но и к любому воображаемому интервалу. –

Смежные вопросы