Можно ли обойтись одним запросом?
нужна таблица с датами (каждая строка таблицы - новый день), если диапазон дат известен, то можно собрать путем SELECT .. UNION SELECT ... и т.д.
вот запрос, который скажет вам в какой день сколько сотрудников отсутствует:SELECT c.date_time, COUNT(*) as cnt
FROM calendar c -- таблица о которой я написал выше
LEFT JOIN leave_people p ON c.date_time BETWEEN p.start_date AND IFNULL(p.end_date, c.date_time)
GROUP BY c.date_time
здесь IFNULL использовал для тех целей, когда окончание неизвестно, например человек на больничном (для случая, когда в таблице leave_people хранятся не только отпуска, но и больничные и т.д.)
Если в БД хранится именно так в 1 или 2 полях "Ваня идёт с 7 по 10 число" т.е. интервалом то нельзя. То это какая-то странная организация БД. Если там хотя бы 2 числа в двух полях + 1 на имя, например Ваня 7 и 10 то можно запросить все сотрудников где число 1 больше 8 и число 2 меньше 10 получим всех кто в отпуске 9го. О месяце тут ещё у вас нет информации. А если отпуск рваный двумя интервалами?