Как связать два SQL запроса - PullRequest
0 голосов
/ 28 апреля 2020

Я хочу соединить следующие два запроса: (Первый запрос)

SELECT 
CASE WHEN date_trunc('month',d) = date_trunc('month', NOW()) 
THEN NOW()ELSE d+interval '1 month' - interval '1 day' END as lastday
FROM generate_series('2020-01-01'::date, NOW(),'1 month') as d

И (2-й запрос)

Select * FROM TableA ta 
LEFT JOIN TableB tb on ta.id = tb.id

Первый запрос дает мне последний день какой-либо конкретной c мес. Я хочу использовать эти дни в предложении where второго запроса. Я думал о том, чтобы поместить первый запрос в левое соединение во втором запросе. Но я не знаю, что пишут в «ON» части. Кроме того, я точно не знаю, как может выглядеть «Вложенное предложение выбора»

Моя цель - использовать последние дни во втором запросе следующим образом:

Select * FROM TableA ta 
LEFT JOIN TableB tb on ta.id = tb.id
where lastday [do something]
group by lastday

1 Ответ

0 голосов
/ 28 апреля 2020

Просто как идея. Можете ли вы получить вещи, которые вы хотите, как это:

SELECT
    ta.d as day, 
    CASE
        WHEN date_trunc('month', d) = date_trunc('month', NOW()) 
            THEN now()
        ELSE 
            date_trunc('month',d)+interval '1 month' - interval '1 day'
    END as lasday
FROM
    TableA ta
    LEFT JOIN TableB tb ON ta.id=tb.id
HAVING -- This works like WHERE but for calculated values. 
    lasday ....

Затем, если вам нужно использовать это lastday в вашей группе с помощью -clause, обратитесь к этой беседе: Как группировать по Расчетное поле

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...