mysql如何对时间段进行按月统计

图片说明

如图,陈雷这个人请了三次假,第一次是2019-04-30到2019-05-08,第二次是2019-05-09到2019-05-11,第三次是2019-05-31到2019-06-01,我想统计出他每个月的请假次数,结果为,2019-04为1次,2019-05为3次,2019-06为1次,这种情况该如何用sql实现呢?

你关键的东西都没说啊,比如说,请假可不可以跨月份来请。另外你提供的数据不是一个完整的数据,没有包含所有情况,分析起来会有漏洞。

SELECT
    p.employee_name,
    date_format(p.date, '%Y%m') time,
    sum(p.num)
FROM
    (
        SELECT
            employee_name,
            start_time date,
            1 num
        FROM
            test190509
        UNION ALL
            SELECT
                employee_name,
                end_time,
                CASE
            WHEN date_format(start_time, '%Y%m') = date_format(end_time, '%Y%m') THEN
                0
            ELSE
                1
            END end_num
            FROM
                test190509
    ) p
GROUP BY
    p.employee_name,
    time;

表设计一开始就是有问题的,你参考企业微信,你会发现,请假多天都是多条记录,一天请假也可能多条 比如按小时请假

请假次数 ——只计算每个月的start_time字段计数、截掉后面的时分秒分组, count计数