如何根据条件订购? SQL服务器

问题描述

例如,我有一个下表:

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 (将#修改为@)