我需要获取给定输入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>1 2021-01-01 为 32456 22021-01-01 disEnrolled 32456 3 2020-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'
)