Oracle查询以查找在过去1个月内获取最大叶数的员工

时间:2018-05-27 05:04:50

标签: sql oracle oracle11g aggregate-functions oracle12c

我将这些表格包含以下列:

  

Employee24 EMPLOYEEID,FIRSTNAME,LASTNAME,GENDER );

     

Leave25 EMPLOYEEID,LEAVEID,LEAVETYPE,STARTDATE,ENDDATE,NOOFDAYS );

我想编写一个查询来查找过去1个月内获得最多离职数量的员工

SELECT * 
  FROM EMPLOYEE24 
 WHERE EMPLOYEEID IN (SELECT EMPLOYEEID 
                        FROM LEAVE25 
                       WHERE STARTDATE < ADD_MONTHS(SYSDATE, -1));

1 个答案:

答案 0 :(得分:1)

如果您的数据库版本为 12c ,则可以使用 前N个查询的行限制条款 作为下面:

SELECT e.*, l.max_leaves
  FROM (SELECT employeeid, count(1) as max_leaves
        FROM LEAVE25 
        WHERE startdate >= add_months(sysdate, -1)
        GROUP BY employeeid           
       ) l JOIN
       EMPLOYEE24 e 
       ON ( e.employeeid = l.employeeid )
 ORDER BY l.max_leaves DESC
 FETCH FIRST 1 ROWS WITH TIES; -- including the same highest leave owners

如果版本为 11g ,则使用 Dense_Rank并使用嵌套查询计数 ,如下所示:

SELECT e.*, l.max_leaves
  FROM (SELECT employeeid, count(1) as max_leaves, 
               dense_rank() over (order by count(1) desc) dr
        FROM LEAVE25 
        WHERE startdate >= add_months(sysdate, -1)
        GROUP BY employeeid           
       ) l JOIN
       EMPLOYEE24 e
       ON ( e.employeeid = l.employeeid )
 WHERE l.dr = 1;

SQL Fiddle Demo for 11g