Вот, пожалуйста:
SELECT
d,
SUM(CASE WHEN t = 'j' THEN 1 ELSE 0 END) as joins,
SUM(CASE WHEN t = 'x' THEN 1 ELSE 0 END) as exits,
SUM(CASE WHEN t = 'j' THEN 1 ELSE 0 END) - SUM(CASE WHEN t = 'x' THEN 1 ELSE 0 END) as net
FROM
(SELECT join_date as d, 'j' as t FROM admissions) j
UNION ALL
(SELECT exit_date as d, 'x' as t FROM exits) x
GROUP BY d
Мы объединяем данные, используя UNION ALL, и записываем их тип - объединение или выход, с простым символом, который мы можем сравнить позже
Мы сгруппировали это по d, давая по одной дате на строку, и суммируем результат условного просмотра того, является ли оно 'j'
oin или e 'x'
it.Если строка aj, то в столбец добавляется 1, отслеживающий общее количество объединений за этот день и т. Д.
Единственное, что вам не дается, это дни, когда нет присоединений или выходов... (Например, 2018-12-25, 0, 0, 0
, потому что рождественский день был закрыт, и никто не делал ничего в тот день) .. Но вы не сказали, что хотели этого.
Если вам нужны строки с датой и 0 выходами, 0 объединениями, 0 сетями, тогда нам нужно работать над дополнительной магией, и это немного больше головной боли / затрудняет еепонимаю (поэтому я оставил это)