【发布时间】:2023-01-03 05:30:02
【问题描述】:
想要检查该员工是否被重新雇用到合同中。如果他被重新雇用,则返还重新雇用期。如果多名员工被重新雇用,则返回他们所有的重新雇用期。
Sample data:(Table 'Contract')
Employee_id Period Contract
111 202204 1NA
111 202205 1NA
111 202206 1NA
112 202207 1NA
112 202208 1NA
111 202209 1NA
在上述情况下,输出应该是,
Employee_id Period Contract
111 202209 1NA
查询应首先检查员工是否被重新雇用,如果是则返回重新雇用期。 如果该合同没有重新雇用,则返回 NULL。
除了 lag n lead 之外的任何其他逻辑也将受到赞赏!
提前致谢:)
【问题讨论】:
-
你试过什么了 ?你有没有得到任何错误?另外请不要发布图片,但请发布格式正确的 ddl 和 dml 脚本。
-
选择 t1.ARCHIVE_PERIOD、t1.PROJECT_OWNER、t1.CONTRACT_NUMBER 来自(SELECT ROW_NUMBER()超过(按 ARCHIVE_PERIOD 排序)ID、ARCHIVE_PERIOD、PROJECT_OWNER、来自 ARC_WORK_CONTRACT_GENERAL 的 CONTRACT_NUMBER WHERE CONTRACT_NUMBER='1N8501_t48' --AND1 项目所有者) JOIN (SELECT ROW_NUMBER() OVER (ORDER BY ARCHIVE_PERIOD) ID, ARCHIVE_PERIOD, PROJECT_OWNER, CONTRACT_NUMBER FROM ARC_WORK_CONTRACT_GENERAL WHERE CONTRACT_NUMBER='1N850248' --AND project_owner ='1110940') t1 ON t1.id = t0.id + 1 AND t0。 PROJECT_OWNER != t1.PROJECT_OWNER
-
我试图比较连续的行,但是这个查询没有检查员工是否被重新雇用
-
您究竟如何确定重新雇用?要将某一行标识为重新雇用行,必须满足什么条件?表的唯一键是什么?时期?期间+ employee_id?期限+合同? period + employee_id + contract?
-
@ThorstenKettner 重新雇用是在员工在一段时间后重新雇用合同时确定的在上面的数据中,员工 111 在员工 112 之后于 202209 被重新雇用。