代码之家  ›  专栏  ›  技术社区  ›  Samy

根据条件更新Sql中的语句

  •  0
  • Samy  · 技术社区  · 11 年前
    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   
    

    我需要更新 旗帜 上表中带有注释的列 (“删除”) 对于所有已(进行中/未启动)的记录 对于同一任务,(同一任务) 除完成外,其他人的状态 例子: 任务“a”显示两次(或多次,但在我的示例中仅显示两次)。 第一次显示在2月21日,状态为“已完成”。 第二次显示在稍后的日期(2月30日)。 因此,第二次出现必须标记为删除。

    如果我们有“a”,“未开始”,2月2日-这将被保留。

    ps.dates作为日期类型加载到数据库中

    1 回复  |  直到 11 年前
        1
  •  0
  •   AK47    11 年前

    尝试下面的代码,我认为表名是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' 
    

    将尝试最短的方法。