Mysql计算月份请求列的总和

时间:2015-03-05 06:08:24

标签: mysql

我有以下记录。

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')

1 个答案:

答案 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

但您必须进一步考虑对此查询进行一些修改。

需要考虑的其他问题:

  1. 如果来自和日期的范围连续两个月重叠,那么你会做什么?

    示例:假设一名员工于2月27日至3月3日休假。然后,对于此日期范围,2月假期应为2,3月假期应为3(假设年份为

  2. 如果存在不同年份的数据,那么您将无法获得正确的结果等。

  3. 建议:

    我建议你进一步思考上述情况,从而改变查询。

    如果您可以修改查询以便查询可以适用于所有可能的方案,那么对我和您来说都将非常高兴。

    好运!