SQL DB2:我需要根据查询结果过滤结果



我需要获取给定输入employee_id's和给定输入日期的id:

条件:我需要查询在输入中给定日期或少于给定日期注册的员工。

约束:雇员在给定的输入日期或之前不应该有' disenroll '状态。

例如:如果employee_id是32456和32458,给定的输入日期是2021-01-01,那么预期的结果是id值3,其中employee_id - 32458。employee_Id(32456)不合格,因为他在给定的输入日期或之前已注销。

我有一个包含以下列的表:

<表类> id 日期 状态 employee_Id tbody><<tr>12021-01-01为3245622021-01-01disEnrolled3245632020-01-01为32458

您可以使用一个简单的EXISTS子句来实现所需的结果-

SELECT Id
FROM EMPLOYEE E
WHERE status = 'enrolled'
AND NOT EXISTS (SELECT NULL
FROM EMPLOYEE E2
WHERE E.employee_Id = E2.employee_Id
AND E2.status = 'disEnrolled')
AND date <= DATE '2021-01-01'
AND Employee_ids IN (empId_1, empId_2, .....);   -- Youe Employee ID list

但是这个查询将产生2条记录32457和32458,而不是只有32458。

WITH TAB (id, date, status, employee_Id) AS
(
VALUES
(1, '2021-01-01', 'enrolled', 32456)
, (2, '2021-01-01', 'disEnrolled', 32456)
, (4, '2020-01-01', 'enrolled', 32458)
)
SELECT DISTINCT employee_Id
FROM TAB A
WHERE status = 'enrolled'
AND NOT EXISTS
(
SELECT 1
FROM TAB B
WHERE B.employee_ID = A.employee_Id 
AND B.status = 'disEnrolled' 
AND B.date <= '2021-01-01'
)

最新更新