@long_skinny_boy

Как посчитать количество сотрудников в штате за каждый месяц в каждом году?

Добрый день, имеется задача в подсчете количества сотрудников в каждом месяце когда, каждого года
Если упростить таблицу с данными то она состоит из 3х столбцов: ID сотрудника, дата приема, дата увольнения

https://dbfiddle.uk/?rdbms=mariadb_10.5&fiddle=65c...

Получается нужно как то хитро сгруппировать таким образом, чтобы получается на выходе получилось что то подобное

2022-01-01 - 1
2022-02-01 - 2
2022-03-01 - 3
2022-04-01 - 4
2022-05-01 - 5
2022-06-01 - 5

Т.е. без разницы в какой день месяца сотрудник оформился/уволился этот месяц считается для него в работе
например если оформился 2022-01-31 а уволился 2022-02-01 - то он всё равно должен учавствовать в счётчике за оба месяца, т.к. хотя бы один день был в каждом месяце
  • Вопрос задан
  • 72 просмотра
Решения вопроса 1
@Akina
Сетевой и системный админ, SQL-программист.
WITH RECURSIVE
cte AS ( SELECT CAST(DATE_FORMAT(@range_from, '%Y-%m-01') AS DATE) month_start,
                LAST_DAY(@range_from) month_end
         UNION ALL
         SELECT month_start + INTERVAL 1 MONTH,
                LAST_DAY(month_start + INTERVAL 1 MONTH)
         FROM cte
         WHERE month_start < DATE_FORMAT(@range_till, '%Y-%m-01')
)
SELECT cte.month_start, COUNT(employee.id) employees_amount
FROM cte
LEFT JOIN employee ON employee.date_employment <= cte.month_end
                  AND (    employee.date_dismissal >= cte.month_start
                        OR employee.date_dismissal IS NULL )
GROUP BY 1;

https://dbfiddle.uk/?rdbms=mariadb_10.4&fiddle=8be...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы