SQL 保留包含列子集中更改的行

标签 sql distinct

我有下表

<表类=“s-表”> <标题> var1 时间 var2 <正文> val1 1 一个 val1 2 一个 val1 3 一个 val1 4 一个 val2 5 一个 val1 6 一个 val3 1 b val4 2 b val4 3 b val5 4 b

我希望删除 var1 中具有重复值的所有行和var2至少保留其中一项的更改。抱歉,解释不清楚,下面是所需表格的示例:

<表类=“s-表”> <标题> var1 时间 var2 <正文> val1 1 一个 val2 5 一个 val1 6 一个 val3 1 b val4 2 b val5 4 b

最后,有没有办法知道在执行查询之前该表将占用多少空间?

编辑:修复表中的变量名称

最佳答案

这是一个间隙和孤岛问题,您可以尝试使用两个行号之间的差异来解决它,如下所示:

WITH define_groups AS
(
  SELECT *,
    ROW_NUMBER() OVER (PARTITION BY var2 ORDER BY time) -
    ROW_NUMBER() OVER (PARTITION BY var1, var2 ORDER BY time) grp
  FROM table_name
),
row_numbering AS
(
  SELECT *,
    ROW_NUMBER() OVER (PARTITION BY var2, grp ORDER BY time) rn
  FROM define_groups
)
SELECT var1, time, var2
FROM row_numbering
WHERE rn = 1
ORDER BY var2, time

参见demo .

关于SQL 保留包含列子集中更改的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74798023/

相关文章:

sql - Node.JS 与 NoSQL 还是 SQL?

mysql - SQL Server all(select ...) 为空

php - 如果出现任何通知,如何限制 MySQL/PHP 插入数据?

MySql 选择多列唯一行

java - 选择 Distinct * 作为查询方法?

mysql - 如何在确定的日期从我的数据库中获取数字结果

用于创建插入脚本的 SQL 脚本

java - JOOQ 如何做 UNION 和 WHERE IN

php - 在mysql中选择多列的不同行

sql - 如何从数组 PostgreSQL 的列中获取唯一值