我将这些表格包含以下列:
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));
答案 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;