0

Я использую fill_months для заполнения пробельных месяцев и группировки данных по месяцам. Проблема в том, что я не могу заставить ее работать для запроса частичных месяцев (например, с 2016-09-01 по 2016-09-15), она всегда учитывает полный месяц. Может ли кто-нибудь указать мне в правильном направлении?Как сделать работу generate_series частью месяца?

with filled_months AS 
    (SELECT 
    month, 
      0 AS blank_count 
    FROM generate_series(date_trunc('month',date('2016-09-01')), date_trunc('month',date('2016-09-15')), '1 month') AS 
    month) 
SELECT to_char(mnth.month, 'YYYY Mon') AS month_year, 
     count(distinct places.id) 
FROM filled_months mnth 
left outer join restaurants 
    ON date_trunc('month', restaurants.created_at) = mnth.month 
left outer join places 
    ON restaurants.places_id = places.id 
WHERE places.id IS NULL OR restaurants.id IS NULL 
GROUP BY mnth.month 
ORDER BY mnth.month 
+3

Вопрос не ясен. –

ответ

0

Если я правильно понимаю ваше затруднительное положение, я не думаю, что вам нужна серия генерации здесь. Я думаю, что вы можете получить с between в вашем где п и пусть группировка в SQL справиться с остальными:

SELECT 
    to_char(r.created_at, 'YYYY Mon') AS month, 
    count(distinct p.id) 
FROM 
    restaurants r 
    left join places p ON r.places_id = p.id 
WHERE 
    r.created_at between '2016-09-01' and '2016-09-15' 
GROUP BY month 
ORDER BY month 

Я испытал это на три записи с датами, 9/1/16, 9/15/16 и 9/30/16, и он подсчитал два. Когда я расширил диапазон до 9/30, он правильно дал три.

ОТКАЗ: Я не понял, что это означало:

places.id IS NULL OR restaurants.id IS NULL 

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