Task Status Date Flag
a Complete February 21, 2014
b In Progress February 11, 2014
c Complete February 11, 2014
d Complete February 1, 2014
a In Progress February 30, 2014 To remove
c Not started February 12, 2014 To remove
b Complete February 13, 2014
我需要更新上表中的标记列,其中包含("删除")所有记录(In进度/未开始) 为同一任务,(同一任务) 每个人的状态,除了完整 例: 任务" a"显示两次(或多次,但在我的示例中只有两次)。 它首次在2月21日显示完成状态。 第二次在日后(2月30日)显示In Progress。 因此必须标记第二次出现。
如果我们有" a","未开始",2月2日 - 这将被保留。
PS。日期作为日期类型加载到数据库中
答案 0 :(得分:0)
尝试以下代码,我已将表名视为tblTask。
With CTE as
(
select task,status,DATE,flag,RANK() over (partition by task order by date asc, status asc) as Rnk
from tblTask
), CTE1 as
(
select * from CTE where
Rnk = 1 and status = 'Complete'
), CTE2 as
(
select tblTask.* from CTE1
left join tblTask on CTE1.task = tblTask.task
where tblTask.status <> 'Complete'
)
update CTE2 set flag = 'To remove'
将尝试最短的方法。