最近在我接受的一次采访中,我被问到



表结构是

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/

10-13 08:18