gpt4 book ai didi

Mysql 按月计算请假列的总和

转载 作者:行者123 更新时间:2023-11-29 22:51:53 25 4
gpt4 key购买 nike

我有以下记录。

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`

我需要计算期间乘以日期(从到)并按月份排列。

所以结果会是这样的。

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

最佳答案

我给你一个查询,它将满足上述示例的需求。

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,三月休假应为 3(假设年份不是闰年)年)

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

建议:

我建议您进一步思考上述情况并更改查询。

如果您可以修改查询,使查询适用于所有可能的场景,我和您都会感到非常高兴。

祝你好运!

关于Mysql 按月计算请假列的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28871145/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com