ORA-00904: «ДНИ»: неверный идентификатор - PullRequest
0 голосов
/ 27 сентября 2018

Вот код, который у меня есть:

SELECT (first_name || ' ' || last_name) AS Name, hire_date, days FROM EMPLOYEES WHERE days > 365*6;

Это то, что я должен делать: создать запрос SQL, который показывает first_name, last_name, hire_date и количество дней, которое сотрудникработал из таблицы сотрудников.Используйте оператор конкатенации, чтобы объединить first_name и last_name в одном столбце в наборе результатов с пробелом между двумя именами.Используйте арифметику дат, чтобы показать только сотрудников, проработавших более 6 лет (365 * 6).

Может ли кто-нибудь помочь мне выяснить, в чем заключается моя ошибка?

Ответы [ 3 ]

0 голосов
/ 28 сентября 2018

Вместо этого вы можете попытаться установить фильтр в день найма

ГДЕ hire_date> sysdate - 365 * 6

0 голосов
/ 28 сентября 2018

это будет работать;

 WHERE sysdate-hire_date >= 365*6
0 голосов
/ 28 сентября 2018

Чтобы исправить ваш запрос, вам нужно выполнить арифметику даты.

SELECT
  (first_name || ' ' || last_name) AS name,
  hire_date,
  ROUND(sysdate - hire_date) AS days
FROM hr.employees
WHERE sysdate - hire_date > 6*365;

Но если вы проанализируете -> hr schema , вы обнаружите, что для этого существует таблица job_history, соответствующая этому.задача.На мой взгляд, правильное решение должно быть таким:

SELECT a1.name,
  a1.hire_date,
  a1.days
FROM
  (SELECT employees.employee_id,
    (employees.first_name || ' ' || employees.last_name) AS name,
    employees.hire_date,
    SUM(NVL(job_history.end_date, TRUNC(sysdate)) - NVL(job_history.start_date, hire_date)) AS days
  FROM hr.employees
  LEFT JOIN hr.job_history
  ON job_history.employee_id = employees.employee_id
  GROUP BY employees.employee_id,
    (employees.first_name || ' ' || employees.last_name),
    employees.hire_date
  ) a1
WHERE days > 365*6;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...