You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用SQL SELECT语句去除分组内连续重复行并输出结果?

解决方案:去除分组内连续重复的Column B记录

要实现按ColumnID分组、组内按Column A排序,且仅保留每组内Column B首次出现的行(过滤连续重复项),可以借助窗口函数LAG()来实现,以下是通用SQL写法:

SELECT Column_A, Column_B
FROM (
    SELECT 
        ColumnID,
        Column_A,
        Column_B,
        -- 同组内按Column_A排序,获取上一行的Column_B值
        LAG(Column_B) OVER (PARTITION BY ColumnID ORDER BY Column_A) AS prev_B
    FROM xyz
) AS sub
-- 保留组内第一行,或当前行B与上一行不同的记录
WHERE prev_B IS NULL OR Column_B != prev_B
-- 按原分组和排序规则输出结果
ORDER BY ColumnID, Column_A;

逻辑说明

  1. 子查询处理:通过PARTITION BY ColumnID将数据按ColumnID分组,ORDER BY Column_A保证组内数据按Column A排序;LAG()函数用于获取当前行在组内的上一行Column B值,命名为prev_B。
  2. 过滤重复项:外层查询中,prev_B IS NULL对应每组的第一行(无前置行,必须保留);Column_B != prev_B筛选出与上一行Column B不同的记录,自动过滤掉连续重复的行。
  3. 排序输出:最后通过ORDER BY ColumnID, Column_A确保结果顺序和需求一致。

这个写法适用于大多数支持窗口函数的数据库(如MySQL 8.0+、PostgreSQL、SQL Server、Oracle等)。

内容的提问来源于stack exchange,提问作者confusedprogrammer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 03:05:22