如图,陈雷这个人请了三次假,第一次是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计数