我怎样才能计算从员工开始日期开始的一年内的假日,然后是连续几天。
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等)。
由于
答案 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
进行整理。
我也会以这种方式使用CEIL
和JOIN
:
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