问题描述
例如,我有一个下表:
ID NAME Company StartDate EndDate Status
--------------------------------------------------------------------------------------
50 Bob ABC 11-15-2016 02-05-2017 Former
50 Bob XYZ 05-06-2014 05-06-2015 Former
50 Bob EFG 06-10-2019 NULL Active
50 Bob LMN 07-05-2019 NULL Active
我试图按降序列出他们最近的3个工作,因此他们的“活动”工作将排在第一位,但是如果他们有2个“活动”的工作,如上面的示例,我只想拉“活动”具有最近开始日期的作业,或者如果两个“活动”作业都具有相同的开始日期,则只需随机选择其中一个,然后跳过另一个“活动”,然后继续执行其最近的先前作业。 “活动”作业将始终具有NULL EndDate值。
所以我要寻找的结果集如下:
ID NAME Company StartDate EndDate Status rn
----------------------------------------------------------------------------------------------
50 Bob LMN 07-05-2019 NULL Active 1
50 Bob ABC 11-15-2016 02-05-2017 Former 2
50 Bob XYZ 05-06-2014 05-06-2015 Former 3
我尝试了下面的代码,但是它无法检查两个活动作业的状态并正确地给他们一个行号。根据上述条件,我只希望其中一个活动作业为rn = 1,而rn = 2和rn = 3将是最后2个“前”作业:
select *,row_number() over (partition by ID,NAME order by CASE WHEN Status = 'Active' AND
EndDate is NULL THEN Status END desc,EndDate desc
) rn
from employment
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)