根据条件在Sql中更新语句

时间:2014-03-19 05:21:02

标签: sql sql-server-2008

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。日期作为日期类型加载到数据库中

1 个答案:

答案 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' 

将尝试最短的方法。