php - 从一年的开始日期开始计算假期天数,然后每年计算

标签 php mysql count

嗨,我将如何计算从员工开始日期起一年内休假的天数,然后连续计算。

Table 1 

id  name    lastname     startdate      holidays

1    jon     homes        2014-10-10      25

假期表将所有假期都拿走

id   empid   date

1       1    2014-12-20
2       1    2014-12-21
3       1    2014-12-22
4       1    2015-10-01
5       1    2015-10-02
6       1    2015-10-11 (this would be a new year)

我如何查询 mysql 以从员工开始日期计算 12 个月的假期,然后在未来每年都这样做,而无需对日期进行硬编码。

我能理解当年如何做到这一点

SELECT COUNT(*)
 FROM Holiday
 WHERE YEAR(date) = YEAR(CURDATE()) AND empid = 1; 

那么我如何从开始日期 2014-10-10 运行查询 12 个月然后每年(下一次开始日期是 2015-10-10 然后是 2016-10-10 等)

谢谢

最佳答案

您需要考虑此查询的一些数学运算。为此,我将计算您的日期 holiday_date - emp_startdate 的差异,并将其除以一年中的天数 result/365,最后使用 CEIL 进行四舍五入。

我还会以这种方式使用 JOINGROUP BY:

SELECT 
    e.name AS Employee,
    CEIL(DATEDIFF(h.date, e.startdate)/365) as Year,
    count(h.date) as Holidays_Taken
FROM employees AS e
LEFT JOIN holidays_taken AS h ON e.id = h.empid
WHERE e.id = 1
GROUP BY Year

结果:

+----------+------+---------------+
| Employee | Year | Holidays_Taken|
+----------+------+---------------+
| Jon      | 1    | 5             |
+----------+------+---------------+
| Jon      | 2    | 1             |
+----------+------+---------------+

演示:SQL FIDDLE

关于php - 从一年的开始日期开始计算假期天数,然后每年计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33105340/

相关文章:

PHP 与 bind_param() 相关的问题;

mysql - 解密 MySQL 编码

mysql - 对同一列进行 COUNT 两次

mysql - 如何计算个人资料浏览量?

php - 在浏览器关闭时调用ajax,而不是更改url

php - 如何在 PHP 中为医生预约系统选择唯一可用的时间和日期

php - 存储插入正确的数据和一个空行 Laravel 5.7

mysql - 在单个查询中显示标记和最大标记

php - MySQL Order by,然后更新 Inner Join

mysql - 如何使用sql获取最大重复次数