2014-01-24 36 views
0

问题是找到经验差异SMITHALLEN。 所以我写了这个查询。在MySQL中查找员工的经验差异

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

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

+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'); 

advanta这个查询的ge是它只读取一次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'之间?)。

+0

谢谢......我真的很喜欢上次查询。这非常有帮助:) –

+1

最后一个应该有一个''',它曾经有'--'。 –

+0

如果我想在**个月**而不是几天内取得差异? –

0

您可以使用下面的查询来获得在几个月的天差:

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