Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.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 查找过去1年内未休过一次假的员工_Sql_Oracle_Oracle11g - Fatal编程技术网

Sql 查找过去1年内未休过一次假的员工

Sql 查找过去1年内未休过一次假的员工,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,我有以下列的表格: Employee24( EMPLOYEEID, FIRSTNAME, LASTNAME, GENDER ); Leave25( EMPLOYEEID,LEAVEID, LEAVETYPE, STARTDATE, ENDDATE); 我想写一个查询,查找在过去1年中没有休过一次假的员工 SELECT FIRSTNAME, LASTNAME FROM EMPLOYEE24 E INNER JOIN ON LEAVE25 L WHERE E.EMPLOYEEID = L.EMP

我有以下列的表格:

Employee24( EMPLOYEEID, FIRSTNAME, LASTNAME, GENDER );

Leave25( EMPLOYEEID,LEAVEID, LEAVETYPE, STARTDATE, ENDDATE);
我想写一个查询,查找在过去1年中没有休过一次假的员工

SELECT FIRSTNAME, LASTNAME FROM EMPLOYEE24 E INNER JOIN ON LEAVE25 L WHERE E.EMPLOYEEID = L.EMPLOYEEID AND L.EMPLOYEEID = NULL AND STARTDATE > ADD_MONTHS(SYSDATE, -12)

您可以使用下面的查询查找过去一年未休假的员工

 SELECT E.EMPLOYEEID, E.FIRSTNAME, E.LASTNAME, MAX(L.STARTDATE), MAX(L.ENDDATE)
FROM EMPLOYEE24 E LEFT JOIN
     LEAVE25 L
     ON E.EMPLOYEEID = L.EMPLOYEEID 
GROUP BY E.EMPLOYEEID, E.FIRSTNAME, E.LASTNAME
HAVING COALESCE(MAX(L.STARTDATE),date'1900-01-01') < ADD_MONTHS(SYSDATE,-12) 
在您的情况下使用NOT IN是合适的,如下所示:

SELECT FIRSTNAME, LASTNAME
  FROM EMPLOYEE24 E
  WHERE E.EMPLOYEEID NOT IN ( SELECT L2.EMPLOYEEID 
                                FROM LEAVE25 L2 
                               WHERE STARTDATE >= ADD_MONTHS(SYSDATE, -12) );

您不一定需要使用联接和子查询。您只需使用以下工具即可:

SELECT E.*
FROM Employee24 E
WHERE NOT EXISTS (SELECT NULL FROM Leave25 L 
                  WHERE E.EMPLOYEEID=L.EMPLOYEEID 
                  AND (STARTDATE>=SYSDATE-INTERVAL '12' MONTH
                  OR ENDDATE>=SYSDATE-INTERVAL '12' MONTH));

请参阅a。

是否要从当前日期开始计算?还是今年的最后一年?@VenkataramanR自当前日期感谢您的回复。它给了我错误ORA-00918:含糊不清的列defined@user2147357 . . . 该查询已修复,但仍然不正确,因为它要求员工在某个时间休假。@GordonLinoff,已修复。谢谢你对这一点的额外关注。真的需要左连接吗?但是如果你在小提琴中删除了这一行,它仍然会得到相同的结果吗?@LukStorms很酷,是的,你是对的,表EMPLOYEE24已经足够选择FIRSTNAME,LASTNAME了。
SELECT E.*
FROM Employee24 E
WHERE NOT EXISTS (SELECT NULL FROM Leave25 L 
                  WHERE E.EMPLOYEEID=L.EMPLOYEEID 
                  AND (STARTDATE>=SYSDATE-INTERVAL '12' MONTH
                  OR ENDDATE>=SYSDATE-INTERVAL '12' MONTH));