Вы можете использовать следующий вложенный 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
Редактировать (в соответствии с вашим комментарием " запрос для сотрудников, которые получили максимальное количество отпусков за последний месяц "):
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 2