Sql 让休假天数最少的员工
最近在我接受的一次采访中,有人问我一个问题 编写一个查询,查找前3个月休假天数最少的员工(按部门划分) 桌子的结构很简单Sql 让休假天数最少的员工,sql,oracle,Sql,Oracle,最近在我接受的一次采访中,有人问我一个问题 编写一个查询,查找前3个月休假天数最少的员工(按部门划分) 桌子的结构很简单 EMPID | TO_DATE | FROM_DATE | LEAVE _TYPE | DEPT_NO 我能够写下这个查询 SELECT min(days) FROM (SELECT id ,(sum((TO_DATE-FROM_DATE)+1) ) days ,dept FROM emp_leave WHERE to_date between ADD_MON
EMPID | TO_DATE | FROM_DATE | LEAVE _TYPE | DEPT_NO
我能够写下这个查询
SELECT
min(days) FROM (SELECT id ,(sum((TO_DATE-FROM_DATE)+1) ) days ,dept
FROM emp_leave
WHERE to_date between ADD_MONTHS(sysdate,-3) AND sysdate group by id,dept)
group by dept ;
但是当我尝试选择emp\u id
时,我必须将它添加到GROUPBY语句中
我被困在那里了。试试这个
SELECT id
,(sum((TO_DATE - FROM_DATE) + 1)) days
,dept
FROM emp_leave
WHERE to_date BETWEEN ADD_MONTHS(sysdate, - 3)
AND sysdate
GROUP BY id
,dept
ORDER BY days LIMIT 1
我认为这个问题应该是这样的
select dept, min(id) keep (dense_rank last order by days)
from ( SELECT id ,
(sum((TO_DATE-FROM_DATE)+1) ) days ,
dept
FROM emp_leave
WHERE to_date between ADD_MONTHS(sysdate,-3)
AND sysdate group by id,dept)
group by dept
;
当然,在SQL中,你有很多不同的方法来实现这一点,但是当涉及到排名的时候,第一个/最后一个函数是非常有用的这不会给出所有部门的emp..它会给出一个至少没有天数的记录leave@Khanjan不客气。我希望您了解它的工作原理,以便在必要时可以重新使用它。