使用CONCAT格式化MySQL

时间:2015-10-13 17:18:35

标签: php mysql sql database

感谢一些帮助,我有一个从2014-10-10开始的MySQL查询,并在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-09而非第1年,然后是2015-10-10至2016-10-09第2年

这是我的SQL FIDDLE

由于

2 个答案:

答案 0 :(得分:0)

我不确定我的目标是什么,但这是我的方法:

http://sqlfiddle.com/#!9/371a7/14

SELECT 
    e.name AS Employee,
    @year := CEIL(DATEDIFF(h.date, e.startdate)/365) AS Year,
    CONCAT(DATE_ADD(e.startdate, INTERVAL @year-1 YEAR),' - ',DATE_ADD(e.startdate, INTERVAL @year 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

答案 1 :(得分:0)

我会以这种方式创建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

DEMO:SQL FIDDLE