选择部门ID,基于hire_time的资历和雇用日期的ealierst日期

时间:2017-11-29 21:37:18

标签: sql oracle

我有这个任务: 选择部门ID,根据被聘为第一个人的月份和时间选择最长的工作时间

我这样写道:

insert

它会产生以下错误:

SELECT department_id, min(hire_date) as earliest_hire_date, sysdate-hire_date dni
FROM employees

我使用oracle。你知道怎么解决它吗?

2 个答案:

答案 0 :(得分:0)

您需要找到符合特定条件的记录(通常意味着您将需要WHERE子句)。 WHERE子句的条件是具有min(hire_date)的记录。所以:

 SELECT department_id, hire_date, sysdate-hire_date
 FROM employees
 WHERE hire_date = (SELECT min(hire_date) FROM employees);

或者那些东西。如果这返回多个记录,您可能只需要在其中抛出GROUP BY或DISTINCT。如果这不会压缩倍数,那么你将不得不实施进一步的逻辑来挑选胜利者(即使多个部门共享相同的“最早的招聘日期”)。

你也可以做类似你正在做的事情(聚合在最小值(hire_date)),然后按照该领域的顺序挑选出最高记录。

对于您在尝试中遇到的错误,当您使用像sum()avg()min()等类似的聚合函数时,那么未聚合的字段必须是在GROUP BY子句中,在您的查询中不存在。

答案 1 :(得分:0)

您可以使用min()

中的select来解决您的问题
select department_id, min(hire_date) as earliest_hire_date,
       sysdate - min(hire_date) as dni
from employees
group by department_id;

我不确定这是否能满足您的需求 - 您的问题没有样本数据,预期结果或您想要的明确解释。另一方面,它确实修复了语法错误。