最近在我接受的一次采访中,我被问到
表结构是
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_id
时,我必须将它添加到 group by 语句中。我被困在那里。
最佳答案
我认为查询应该是这样的
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 中你有很多不同的方法来做到这一点,但是当它是关于排名的东西时,第一个/最后一个函数非常有用
关于sql - 获取已休最少休假天数的员工,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31913651/