sql-server - 在 SQL 中仅选择唯一的连续行

标签 sql-server tsql

之前有几个问题( 12 )与我想要做的事情非常接近,但无法找出答案。

就我而言,我的数据可能包含多个连续重复项,因此从 Martin did 开始:

例如

id      companyName
-------------------    
1       dogs ltd
2       cats ltd
3       pigs ltd
4       pigs ltd
5       pigs ltd
6       cats ltd
7       cats ltd
8       dogs ltd
9       pigs ltd

我想回来

companyName
-----------    
dogs ltd
cats ltd
pigs ltd
cats ltd
dogs ltd
pigs ltd

消除连续重复项,但保持唯一值按顺序排列。在前面的所有问题中,使用 leadlag 函数,只会向前或向后查看一个,不允许出现 3 个或更多重复的连续值。

最佳答案

这样就可以了:

SELECT companyName
FROM
    (
        SELECT
            id
            , companyName
            , LEAD(companyName, 1, NULL) OVER (ORDER BY id) lead
        FROM yourTable
    ) Q
WHERE
    companyName <> lead
    OR lead IS NULL
ORDER BY id

关于sql-server - 在 SQL 中仅选择唯一的连续行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47442851/

相关文章:

sql-server - MS SQL 批量插入

sql-server - 无法连接到 SQLServer Kafka Connect

sql-server - 使用 UNION 时 SQL 返回的结果更少?

sql - 忽略 WHERE 过滤器转换为 float 时出错

sql-server - 从 XML SQL Select 语句获取值

java - 如何将多个 "SELECT"语句合并为一个?

sql-server - VisualStudio SQL 数据库项目 sqlcmdvars TFS 部署覆盖自定义文件路径?

sql - CTE 表达式中的 TSQL-ORDER BY 子句?

sql - 不允许 UPDATE,因为该语句更新 View "table_name",该 View 参与联接并具有 INSTEAD OF UPDATE 触发器

c# - 在 Datagridview 中显示数据库搜索结果