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

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

关于sql - 删除具有相同字段值的连续行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10446546/

相关文章:

sql - 将具有相同 id 的行合并到一行中,保留所有数据

sql - 如何获取 SQL Server 查询的近似结果行数

sql - T-SQL,在单个选择中更新多个变量

c# - EF delete 尝试更新外键

sql-server - 在 CONTAINSTABLE SQL SERVER FULL TEXT SEARCH 中使用 'AND' 时遇到问题

MySQL - 来自另一个表的总和

sql - 如何在postgres中用冒号 ":"组合两列

mysql - 按累积分组计算不同项目的计数

sql-server - 使用 SQL CE 4 进行用户数据存储

SQL 自定义搜索特殊字符