SQL:仅按连续的行分组

乔夫

我有一个包含一百万行和50多个列的表,其中保留了所有记录更改。由于表的大小非常大,因此需要删除一列,并且需要删除所有随后重复的记录。

ID   otherID   a     b   |    c  
----------------------------------------
1     10       1     2   |    1
2     10       1     2   |    2
3     20       2     2   |    3
4     10       1     2   |    4
5     10       10    2   |    5
6     10       10    2   |    6
7     10       1     2   |    7

因此,可以说我要删除column C,而我只需要保留第一个唯一记录。我需要的记录是1、3、5和7。所以我的问题是如何将1和2和4分组,而不是第6行?

塞格

如果我说对了,那么对于数据:

DECLARE @T TABLE (
  ID INT, 
  otherID INT, 
  a INT, 
  b INT
);

INSERT 
INTO @T (
  ID,
  otherID, 
  a, 
  b
)
VALUES
  (1, 10, 1, 2),
  (2, 10, 1, 2),
  (3, 20, 2, 2),
  (4, 10, 1, 2),
  (5, 10, 10, 2),
  (6, 10, 10, 2),
  (7, 10, 1, 2)
;

以下查询应返回您要查找的内容:

WITH grp AS (
  SELECT        ID,
                otherID,  
                a,  
                b,
                grp = ROW_NUMBER() OVER(PARTITION BY otherID ORDER BY (id))
               - ROW_NUMBER() OVER(PARTITION BY otherID, a, b ORDER BY (id))
   FROM        @T
), 
filter AS (
  SELECT       ID, 
               otherID,  
               a, 
               b,
               grp,
               rn = ROW_NUMBER() OVER(PARTITION BY grp, otherID, a, b ORDER BY (id))
  FROM         grp
)

DELETE
FROM           filter 
WHERE          rn >1;

SELECT         * 
FROM           @T 
ORDER BY       id

这将返回:

ID   otherID   a     b   
-------------------------
1    10        1     2
3    20        2     2
5    10        10    2
7    10        1     2

您可以在SQL Fiddle中看到这一点

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SQL:仅按连续的行分组

来自分类Dev

SQL Server:按连续分组

来自分类Dev

按连续外键值分组的SQL查询

来自分类Dev

sql排名仅连续行

来自分类Dev

按行分组的SQL联合

来自分类Dev

SQL Server:使用GROUP BY时仅将连续记录分组

来自分类Dev

如何在SQL中按连续值分组

来自分类Dev

熊猫-按连续范围分组

来自分类Dev

熊猫按连续数字分组

来自分类Dev

连续几天按ID分组

来自分类Dev

如何获取按行分组的计数 - SQL

来自分类Dev

如何按一列仅2行分组?

来自分类Dev

SQL Server GROUP COUNT个仅连续行

来自分类Dev

根据列的值连续性,按行拆分/分组熊猫数据帧

来自分类Dev

SQL-按日期范围对行进行分组,并在行中包含连续的值

来自分类Dev

sql查询按连续日期范围内的数据进行分组

来自分类Dev

SQL-按日期范围对行进行分组,并在行中包含连续的值

来自分类Dev

在 SQL 中按条件对连续值进行分组和排名

来自分类Dev

根据连续的排序值按DataFrame分组

来自分类Dev

按连续时间对用户活动进行分组

来自分类Dev

SQLite查询-按连续序列分组

来自分类Dev

在 Pandas DataFrame 中按连续索引分组

来自分类Dev

Pandas:如何按连续列值分组

来自分类Dev

Dplyr:按条件过滤按对分组的数据集,每对仅保留一行

来自分类Dev

按行分组

来自分类Dev

按前缀分组行

来自分类Dev

按值分组行

来自分类Dev

仅显示按特定行分组的所有数据:从具有column ='value'的按列分组的表中选择*

来自分类Dev

按 LINQ 分组与按 SQL 分组