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

如何通过SQL删除Values列的连续重复组值对应的行?

解决连续重复组的SQL查询方案

要实现只保留Values列每个连续重复组的第一条记录,可通过**窗口函数LAG()**来实现,具体方案如下:

核心SQL语句

假设你的表名为your_table,执行以下查询:

SELECT Id, `Values`
FROM (
    SELECT 
        Id, 
        `Values`,
        -- 获取当前行的上一行Values值,按Id排序保证顺序
        LAG(`Values`) OVER (ORDER BY Id) AS prev_value
    FROM your_table
) AS sub_query
-- 筛选:第一行(无前置行) 或 当前行Values与上一行不同
WHERE prev_value IS NULL OR `Values` != prev_value;

逻辑说明

  1. LAG()函数:按Id排序后,为每一行获取它前一行的Values值,命名为prev_value
  2. 筛选条件:
    • prev_value IS NULL:保留表中的第一行(没有前一行数据)
    • Values != prev_value:保留当前行与前一行Values不同的记录,也就是每个连续重复组的第一条

为什么GROUP BY/DISTINCT/普通ROW_NUMBER()不行?

  • GROUP BY/DISTINCT会直接去重所有重复的Values值,无法保留非连续的重复项(比如原表中第1行、第4行、第8行的A都需要保留)
  • 单纯的ROW_NUMBER() OVER (PARTITION BY Values ORDER BY Id)只能给每个Values分组加序号,但无法区分连续的重复组,无法筛选出连续组的第一条

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 17:09:59