табличка с данными
CREATE TABLE `t_otp` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`dt_start` DATE NULL DEFAULT NULL,
`dt_end` DATE NULL DEFAULT NULL,
`fio` VARCHAR(50) NULL DEFAULT NULL,
PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;
INSERT INTO `t_otp` (`id`, `dt_start`, `dt_end`, `fio`) VALUES
(1, '2015-03-07', '2015-03-10', 'Ваня'),
(2, '2015-03-08', '2015-03-12', 'Ира');
запрос
select concat(tab.date,' число - ',
(select count(1) from t_otp where tab.date between dt_start and dt_end)
, ' сотрудника в отпуске ') abb
from (
SELECT '2015-03-06' + INTERVAL(CAST(CONCAT(CAST(a.num AS CHAR), CAST(b.num AS CHAR)) AS UNSIGNED)) DAY `date`
FROM
(SELECT 0 AS num UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS a,
(SELECT 0 AS num UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS b
WHERE '2015-03-06' + INTERVAL(CAST(CONCAT(CAST(a.num AS CHAR), CAST(b.num AS CHAR)) AS UNSIGNED)) DAY <= '2015-03-13'
ORDER BY 1
) tab
результат
2015-03-06 число - 0 сотрудника в отпуске
2015-03-07 число - 1 сотрудника в отпуске
2015-03-08 число - 2 сотрудника в отпуске
2015-03-09 число - 2 сотрудника в отпуске
2015-03-10 число - 2 сотрудника в отпуске
2015-03-11 число - 1 сотрудника в отпуске
2015-03-12 число - 1 сотрудника в отпуске
2015-03-13 число - 0 сотрудника в отпуске
оптимизируйте дальше сами...