Я пытаюсь получить количество дней между случайной датой и следующей известной датой праздника. Допустим, моя первая таблица выглядит так:
date | is_holiday | zone
9/11/18 | 0 | A
22/12/18 | 1 | A
и мой праздничный стол выглядит так
start_date | end_date | zone
20/12/18 | 04/01/18 | A
21/12/18 | 04/01/18 | B
...
Я хочу знать, сколько дней проходит между записью, которая не является выходным в первой таблице, и следующей датой.
Я попытался получить следующую строку с более поздней датой в предложении соединения, но соединение не является инструментом для этой задачи. Я также попытался сгруппировать по дате и сравнить дату со следующей строкой, но у меня может быть несколько записей с одной и той же датой в первой таблице, поэтому она не работает.
Это предложение соединения, которое я пробовал:
SELECT mai.*, vac.start_date, datediff(vac.start_date, mai.date)
FROM (SELECT *
FROM MAIN
WHERE is_holiday = 0
) mai LEFT JOIN
(SELECT start_date, zone
FROM VACATIONS_UPDATED
ORDER BY start_date
) vac
ON mai.date < vac.start_date AND mai.zone = vac.zone
Я ожидаю, что таблица будет выглядеть так:
date | is_holiday | zone | next_holiday
9/11/18 | 0 | A | 11
22/12/18 | 1 | A | 0
Есть ли какие-либо подсказки о том, как этого добиться?