我是 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 上连接“当前”和“上一个”记录;如果 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

10-07 18:28