我有以下记录。
Employee Period from to
Dave 1 `2015-01-01` `2015-01-01`
Goliath .5 `2015-01-21` `2015-01-21`
Goliath 1 `2015-02-05` `2015-02-06`
Dave 1 `2015-01-10` `2015-01-11`
我需要计算Period乘以date(从to到)并按月计算。
所以结果就是这样。
Employee Jan_leave Feb_leave Total Leave
Dave 3 0 3
Goliath .5 2 2.5
我的查询不太正确
SELECT `employee`, (DATEDIFF(`to`, `from`)+1 *(`period`)), DATE_FORMAT(`from`, '%M') AS m
FROM `leave` GROUP BY `employee`, DATE_FORMAT(`from`, '%Y-%m')
答案 0 :(得分:0)
我给你一个满足上述例子要求的查询。
SELECT
employee,
SUM(CASE WHEN MONTH(`from`)=1 THEN ((DATE(`to`)-DATE(`from`)+1) * period) ELSE 0 END) AS Jan_leave,
SUM(CASE WHEN MONTH(`from`)=2 THEN ((DATE(`to`)-DATE(`from`)+1) * period) ELSE 0 END) AS Feb_leave,
SUM( (DATE(`to`)-DATE(`from`)+1) * period) AS Total_leave
FROM `leave`
GROUP BY employee
但您必须进一步考虑对此查询进行一些修改。
需要考虑的其他问题:
如果来自和日期的范围连续两个月重叠,那么你会做什么?
示例:假设一名员工于2月27日至3月3日休假。然后,对于此日期范围,2月假期应为2,3月假期应为3(假设年份为
如果存在不同年份的数据,那么您将无法获得正确的结果等。
建议:
我建议你进一步思考上述情况,从而改变查询。
如果您可以修改查询以便查询可以适用于所有可能的方案,那么对我和您来说都将非常高兴。
好运!