4

我是 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

谢谢你。

4

1 回答 1

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

于 2012-05-04T10:15:07.650 回答