У меня есть 3 таблицы, к которым я запрашиваю данные, основанные на разных условиях. У меня есть параметры from
и to
, и это те, которые я использую для создания диапазона времени, в течение которого я ищу данные в этих таблицах.
Например, если у меня есть from
равно «2020-07-01», а to
равно «2020-08-01». Я ожидаю получить сгруппированные значения строк таблиц по неделям, если в некоторых случаях некоторые из недель не будут У меня есть записи, которые я хочу вернуть 0, если в некоторых таблицах есть записи за ту же неделю, я бы хотел их просуммировать.
В настоящее время у меня есть это:
SELECT d.day, COALESCE(t.total, 0)
FROM (
SELECT day::date
FROM generate_series(timestamp '2020-07-01',
timestamp '2020-08-01',
interval '1 week') day
) d
LEFT JOIN (
SELECT date AS day,
SUM(total)
FROM table1
WHERE id = '1'
AND date BETWEEN '2020-07-01' AND '2020-08-01'
GROUP BY day
) t USING (day)
ORDER BY d.day;
Я генерируя серию дат, сгруппированных по неделям, и вдобавок к этому я добавляю левое соединение. Теперь по какой-то причине он работает только в том случае, если даты полностью совпадают, иначе COALESCE(t.total, 0)
возвращает 0, даже если на этой неделе SUM (total) не 0.
Так же, как я применяю LEFT JOIN , Я использую другие левые соединения с другими таблицами в том же запросе, поэтому у меня такая же проблема.