查询休假最多的员工

Query for employee who has maximum leaves

我有这些表格,其中包含以下列:

我想编写一个查询来查找休假次数最多的员工:

select emp.*, L.Startdate - L.Enddate 
from leave25 l, employee24 emp
where emp.employeeid = l.employeeid 
  and l.startdate - l.enddate = (select max(startdate - enddate) from  leave25)

您可以使用以下嵌套的 SQL 和 DENSE_RANK() 函数(包括关系(相同的值)):

SELECT EMPLOYEEID, FIRSTNAME, LASTNAME, LEAVE_DAY
  FROM
(
SELECT L.EMPLOYEEID, FIRSTNAME, LASTNAME, 
       (ENDDATE - STARTDATE + 1) LEAVE_DAY,
       DENSE_RANK() OVER (ORDER BY (ENDDATE - STARTDATE + 1) DESC) DR
  FROM EMPLOYEE24 E JOIN LEAVE25 L ON ( E.employeeid = L.employeeid )
 GROUP BY L.EMPLOYEEID, FIRSTNAME, LASTNAME, ENDDATE - STARTDATE + 1                        
)            
WHERE DR = 1
ORDER BY 1;

SQL Fiddle Demo

编辑(根据您的评论“查询过去 1 年休假次数最多的员工月") :

SELECT EMPLOYEEID, FIRSTNAME, LASTNAME,
              LEAVE_DAY
  FROM            
(              
  SELECT EMPLOYEEID, FIRSTNAME, LASTNAME,
         LEAVE_DAY, DENSE_RANK() OVER (ORDER BY LEAVE_DAY DESC) DR 
    FROM
  (
    SELECT L.EMPLOYEEID, FIRSTNAME, LASTNAME,
         DECODE(SIGN(ENDDATE - ADD_MONTHS(TRUNC(SYSDATE),-1)+1),-1,0,
                     ENDDATE - ADD_MONTHS(TRUNC(SYSDATE),-1)+1) -
         DECODE(SIGN(STARTDATE - ADD_MONTHS(TRUNC(SYSDATE),-1)+1),1,
                    (STARTDATE - ADD_MONTHS(TRUNC(SYSDATE),-1)),0)
         as LEAVE_DAY
      FROM EMPLOYEE24 E JOIN LEAVE25 L ON ( E.employeeid = L.employeeid )
  ) 
)
WHERE DR = 1
ORDER BY 1; 

SQL Fiddle Demo 2

试试这个:

Select Top 1  e.EMPLOYEEID,e.Name,SUM(DATEDIFF(d,StartDate,EndDate)+1) as LeaveTaken 
from Leave25 l
INNER JOIN Employee24 e on l.EMPLOYEEID=e.EMPLOYEEID
Group By e.EMPLOYEEID,e.Name
Order by LeaveTaken desc