У меня проблема с присоединением postrgresql. Возможно, я подхожу к этому неправильно, но вот сценарий.
У меня есть таблица, которая содержит два соответствующих столбца: даты и месяцы (вместе с другими данными). С каждой датой должны быть связаны следующие 5 месяцев, включительно. Это не всегда так; Я хочу выяснить, когда это не так. Кроме того, нет никакой гарантии, что каждая дата находится в таблице (для которой должно быть 5 месяцев), но у меня есть другая таблица, которая содержит эти даты.
Таблица должна содержать (на одну дату):
![Expected](https://i.stack.imgur.com/RHBBs.png)
Однако из-за множества возможностей таблица может содержать только:
![Possible](https://i.stack.imgur.com/T0cyv.png)
Я попытался найти пропущенные даты, сгенерировав ряд ожидаемых дат и присоединившись к серии месяцев, которые должны быть связаны с датой. Я столкнулся с проблемой, потому что мне нужно объединить таблицы в двух столбцах, которые мне нужны, поэтому, если один из них не существует, он не проходит через предложение ON или WHERE.
Возможно, мне нужно подойти к этому по-другому, но вот моя текущая попытка.
SELECT
D.date, JOINMONTH::date, DT.month
FROM
day D
CROSS JOIN
generate_series(date_trunc('month', D.date),
date_trunc('month', D.date) + INTERVAL '4 months',
'1 month') AS JOINMONTH
LEFT JOIN
dates_table DT ON D.date = DT.date
AND JOINMONTH::date = DT.month
WHERE
D.date >= '2018-01-01';
Что бы я хотел увидеть:
![Result (goal)](https://i.stack.imgur.com/OAsGJ.png)
EDIT:
Этот db-fiddle дает мой полный запрос. Я пропустил некоторые из предложения where, потому что я думал, что это не имеет значения, но, похоже, это часть проблемы. Имея это в виду, мой выбранный ответ решит мою проблему, представленную этой структурой / запросом, но ответ @Gordon Linoff является правильным для исходного вопроса.