Запрос даты SQL показывает несуществующие дни

Я столкнулся со следующей проблемой:

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

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

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

Решение, которое работает сейчас, состоит в том, чтобы иметь еще одну таблицу с каждой датой с 01.01.2008 по 01.01.2018.

И прямое присоединение к нему по каждому запросу, ориентированному на диапазон дат....

это лучший способ?


person Eduardo Oliveira    schedule 01.04.2014    source источник


Ответы (1)


Выполните 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
person Clodoaldo Neto    schedule 01.04.2014
comment
Хорошо, решение кажется более чистым, поскольку ему не нужно постоянно иметь сатичную таблицу, но разве это не то же самое или худшая производительность? Так как вы все еще правы, присоединяясь к таблицам, и в этом решении данные генерируются для каждого запроса? - person Eduardo Oliveira; 02.04.2014
comment
@Eduardo Я предполагаю, что генерировать данные дешевле, чем запрашивать их из файловой системы. Он также гораздо более гибкий, поскольку применяется не только к последовательным дням, но и к любому мыслимому интервалу. - person Clodoaldo Neto; 02.04.2014