Sql 删除顺序重复项

Sql 删除顺序重复项,sql,sql-server,Sql,Sql Server,我有一个事件管理系统,它在每次更新记录时将行输入数据库 任务可能会进入开始->编辑->批准->拒绝->编辑-批准->完成 但是,它可能会被某些人更新几次,因此一个状态中有多个条目 开始->编辑->编辑->批准->拒绝->拒绝->编辑-批准->完成 我想删除squential副本,但如果该状态稍后出现,则不删除 我尝试过使用分区 SELECT taskid,version,TaskStatus, ROW_NUMBER() OVER (Partition by taskid,taskstatus O

我有一个事件管理系统,它在每次更新记录时将行输入数据库

任务可能会进入开始->编辑->批准->拒绝->编辑-批准->完成

但是,它可能会被某些人更新几次,因此一个状态中有多个条目

开始->编辑->编辑->批准->拒绝->拒绝->编辑-批准->完成

我想删除squential副本,但如果该状态稍后出现,则不删除

我尝试过使用分区

SELECT taskid,version,TaskStatus, ROW_NUMBER() OVER (Partition by taskid,taskstatus ORDER BY taskid, cast(version as int)) As SetId 
into sqrank from sqtaskflow 
产生

ID  VER     STATUS          RANK
16  1   QA Complete         1
16  2   QA Complete         2
16  3   QA Complete         3
16  4   In Queue            1
16  5   In Queue            2
16  6   In Queue            3
16  7   QA Complete         4
16  8   QA Complete         5
16  9   QA Complete         6
16  10  Task complete           1
期望的产出将是

ID  VER     STATUS          RANK
16  1   QA Complete         1
16  4   In Queue            1
16  7   QA Complete         4
16  10  Task complete           1

假设
版本
始终是连续的,没有间隙

SELECT
  taskid,
  MIN(version)   AS first_version,
  TaskStatus,
  COUNT(*)       AS repeats
FROM
(
  SELECT
    taskid,
    CAST(version AS INT)  AS version,
    TaskStatus,
    ROW_NUMBER() OVER (Partition by taskid             ORDER BY taskid, cast(version as int)) AS task_ordinal,
    ROW_NUMBER() OVER (Partition by taskid, taskstatus ORDER BY taskid, cast(version as int)) AS task_status_ordinal
  FROM
    sqtaskflow
)
  AS sequenced
GROUP BY
  taskid,
  TaskStatus,
  task_ordinal - task_status_ordinal
ORDER BY
  taskid,
  TaskStatus,
  MIN(version)

示例数据

ID  VER   STATUS          RANK   Ver-Rank   Group

16  1     QA Complete     1      0          16,QA Complete,0
16  2     QA Complete     2      0          16,QA Complete,0
16  3     QA Complete     3      0          16,QA Complete,0

16  4     In Queue        1      3          16,In Queue,3
16  5     In Queue        2      3          16,In Queue,3
16  6     In Queue        3      3          16,In Queue,3

16  7     QA Complete     4      3          16,QA Complete,3
16  8     QA Complete     5      3          16,QA Complete,3
16  9     QA Complete     6      3          16,QA Complete,3

16  10    Task complete   1      9          16,Task Complete,9
编辑:


已修改查询以创建顺序值(无间隙)以代替
版本

这很接近-不幸的是,版本可能有间隙-抱歉,我没有提到这一点完美的谢谢认为(按taskid划分的)上的行_NUMBER()有错误,(额外的逗号)