计算从开始日期到一年的假日天数

时间:2015-10-13 14:29:30

标签: 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; 

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

由于

2 个答案:

答案 0 :(得分:0)

只需使用BETWEEN子句:

SELECT COUNT(*)
 FROM Holiday
 WHERE date BETWEEN '2015-10-10' AND '2016-10-10' AND empid = 1; 

动态方式:

SELECT * 
FROM Holidays 
WHERE date BETWEEN DATE_SUB(CONCAT(YEAR(CURDATE()), '-10-10'), INTERVAL 1 YEAR) AND CONCAT(YEAR(CURDATE()), '-10-10') 
AND empid = 1; 

编辑:相反,你必须从第-1年开始。

答案 1 :(得分:0)

您需要考虑此查询的一些数学运算。为了实现这一目标,我将在您的日期[{1}}中进行区分并将其除以一年中的日期holiday_date - emp_startdate,最后使用result/365进行整理。

我也会以这种方式使用CEILJOIN

GROUP 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

DEMO:SQL FIDDLE