删除具有相同字段值的连续行

时间:2012-05-04 09:51:45

标签: sql sql-server sql-server-2008 tsql

我是SQL Server 2008的初学者,我很难找到解决以下问题的方法:

我想做一个SELECT,它会消除具有相同“stat”的连续行,并且只保留最后一次出现。

为了让自己更好地理解,我举了这个例子:

My table                                                 Results 
idLigne | id | statut                                    idLigne | id | stat  
   L1     1      A                                          L2     1      A
   L2     1      A                                          L6     1      B
   L3     1      B                                          L7     1      A
   L4     1      B                    ====>                 L8     1      B
   L5     1      B
   L6     1      B
   L7     1      A
   L8     1      B

谢谢。

1 个答案:

答案 0 :(得分:3)

如果将行号分配给结果集,则可以在行号和行号上连接“当前”和“上一个”记录 - 1;如果statut不是来自t2的同一行将被淘汰。测试这将给我们没有前辈的行。

; with transformed as (
  select idLigne, 
         statut, 
         row_number () over (order by idLigne) rn
    from myTable
)
select myTable.*
  from myTable
 inner join transformed t1
    on myTable.idLigne = t1.idLigne
  left join transformed t2
    on t1.rn = t2.rn - 1
   and t1.statut = t2.statut
 where t2.rn is null

演示时间为Sql Fiddle