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