获取已休假最短休假日的员工

时间:2015-08-10 07:17:02

标签: 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_MONTHS(sysdate,-3)  AND sysdate group by id,dept) 
group by dept  ;

但是当我尝试选择emp_id时,我必须在group by语句中添加它。

我被困在那里。

2 个答案:

答案 0 :(得分:2)

我认为查询应该是

 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中你有很多不同的方法可以做到这一点,但是当它是关于排序的东西时,第一个/最后一个函数是非常有用的

答案 1 :(得分:1)

试试这个

 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