admin

使用CONCAT格式化MySQL

sql

多亏了一些帮助,我才有了一个MySQL查询,该查询从2014-10-10开始,并对12个月内的假期数量进行了罚款,例如2014-10-10至2015-10-09,然后是2015-10-10至2016-10-09

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             |
+----------+------+---------------+

是否可以将2014年10月10日到2015年10月9日而不是从1年开始显示,然后将2015年10月10日到2016年10月9日作为第二年显示

这是我的SQL FIDDLE

谢谢


阅读 165

收藏
2021-07-01

共1个答案

admin

我将以CONCAT这种方式创建:

SELECT 
    e.name AS Employee,
    CONCAT(
        CEIL(DATEDIFF(h.date, e.startdate)/365), 
        ' (',
        DATE_ADD(e.startdate, INTERVAL FLOOR(DATEDIFF(h.date, e.startdate)/365) YEAR), ' to ',        
        DATE_ADD(e.startdate, INTERVAL CEIL(DATEDIFF(h.date, e.startdate)/365) YEAR),
        ')'
        ) as Year,
    COUNT(h.date) AS Holidays_Taken,
    SUM(h.hours) AS Hours
FROM employees AS e
LEFT JOIN holidays_taken AS h ON e.id = h.empid
WHERE e.id = 1
GROUP BY Year

演示: SQL FIDDLE

2021-07-01