Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 让休假天数最少的员工_Sql_Oracle - Fatal编程技术网

Sql 让休假天数最少的员工

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

最近在我接受的一次采访中,有人问我一个问题

编写一个查询,查找前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\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不客气。我希望您了解它的工作原理,以便在必要时可以重新使用它。