首页 > 解决方案 > 如何删除相邻的重复行?

问题描述

Orange
Orange
Orange
Apple
Apple
Apple
Orange
Orange
Grapes
Grapes

我想删除彼此相邻的任何相同值,而不是所有值。结果应该是

Orange
Apple
Orange
Grapes

这里橙色重复,但它来自不同的部分。所以这很好。我没有任何其他支撑柱来进行分区。如何在 sql server 中执行此操作

标签: sqlsql-server

解决方案


SQL 表表示无序集。让我假设您的数据有一个指定排序的列。

在这种情况下,您可以使用lag()

select t.*
from (select t.*,
             lag(col) over (order by ordering_col) as prev_col
      from t
     ) t
where prev_col is null or prev_col <> col;

如果要删除行,可以使用:

with todelete as (
      select t.*,
             lag(col) over (order by ordering_col) as prev_col
      from t
     )
delete from todelete
    where prev_col = col;

推荐阅读