2014-01-24 2 views
0

Вопрос заключается в поиске опыта Разница SMITH и ALLEN. Итак, я написал этот запрос.Найти разницу в опыте сотрудника в 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'); 

Адванта ge этого запроса состоит в том, что он только считывает таблицу emp.

EDIT: (около месяца)

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); 
Смежные вопросы