查找员工在MySQL中的体验差异

时间:2014-01-24 12:11:38

标签: mysql

问题是找到 SMITH ALLEN 的经验差异。 所以我写了这个查询。

SELECT DATEDIFF(
    SELECT hiredate FROM emp 
           WHERE ename LIKE 'SMITH', 
    SELECT hiredate FROM emp 
           WHERE ename LIKE 'ALLEN'
) FROM emp;

它显示错误.. 这个查询有什么问题。 Plz帮助......

2 个答案:

答案 0 :(得分:3)

子查询需要用括号括起来:

SELECT DATEDIFF(
    (SELECT hiredate FROM emp 
           WHERE ename LIKE 'SMITH'), 
    (SELECT hiredate FROM emp 
           WHERE ename LIKE 'ALLEN')
) FROM emp;

除非你想要很多行,否则你实际上并不需要最后的from emp

SELECT DATEDIFF(
    (SELECT hiredate FROM emp 
           WHERE ename LIKE 'SMITH'), 
    (SELECT hiredate FROM emp 
           WHERE ename LIKE 'ALLEN')
);

编写此查询的另一种方法:

select datediff(max(case when ename like 'SMITH' then hiredate end),
                max(case when ename like 'ALLEN' then hiredate end)
               )
from emp
where ename in ('SMITH', 'ALLEN');

此查询的优点是它只读取emp表一次。

编辑:(大约几个月)

MySQL没有内置的计算值之间月份的能力。近似值为days / 30.4。您可以使用period_diff()。但如果这很重要,那就问另一个问题并举几个月差异的例子('2014-01-31'和'2014-02-01'之间有什么区别?'2014-01-12之间'和'2014-02-11'?在'2014-01-01'和'2014-01-31'之间?)。

答案 1 :(得分:0)

您可以使用以下查询来获取月份的天数差异:

SELECT ceil(DATEDIFF(
    (SELECT hiredate FROM emp WHERE ename LIKE 'SMITH'),(SELECT hiredate FROM emp WHERE ename LIKE 'ALLEN')
)/30.4);