从一年的开始日期开始计算假期天数,然后每年计算
Count holiday days from start date for a year then every year
嗨,我将如何计算从员工开始日期起一年内休假的天数,然后连续计算。
Table 1
id name lastname startdate holidays
1 jon homes 2014-10-10 25
假期 table 将休完所有假期
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 等等)
谢谢
只需使用 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 年开始。
您需要考虑此查询的一些数学运算。为此,我将计算您的日期 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
结果:
+----------+------+---------------+
| Employee | Year | Holidays_Taken|
+----------+------+---------------+
| Jon | 1 | 5 |
+----------+------+---------------+
| Jon | 2 | 1 |
+----------+------+---------------+
演示:SQL FIDDLE
嗨,我将如何计算从员工开始日期起一年内休假的天数,然后连续计算。
Table 1
id name lastname startdate holidays
1 jon homes 2014-10-10 25
假期 table 将休完所有假期
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 等等)
谢谢
只需使用 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 年开始。
您需要考虑此查询的一些数学运算。为此,我将计算您的日期 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
结果:
+----------+------+---------------+
| Employee | Year | Holidays_Taken|
+----------+------+---------------+
| Jon | 1 | 5 |
+----------+------+---------------+
| Jon | 2 | 1 |
+----------+------+---------------+
演示:SQL FIDDLE