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

SQL实现保留var1/var2变更行及预估算表空间方法

一、原始表格(变量名已翻译为中文)
变量1时间变量2
值11a
值12a
值13a
值14a
值25a
值16a
值31b
值42b
值43b
值54b
二、期望结果表格
变量1时间变量2
值11a
值25a
值16a
值31b
值42b
值54b
三、移除重复行的实现方案

要过滤掉变量1和变量2连续重复的行,仅保留字段发生变化的记录,可以借助窗口函数对比当前行与上一行的字段值,以下是主流数据库的实现示例:

通用方案(支持多数据库)

WITH ranked_rows AS (
    SELECT 
        变量1, 
        时间, 
        变量2,
        -- 获取上一行的变量1和变量2值
        LAG(变量1) OVER (ORDER BY 时间) AS 上一行变量1,
        LAG(变量2) OVER (ORDER BY 时间) AS 上一行变量2
    FROM 你的表名
)
SELECT 变量1, 时间, 变量2
FROM ranked_rows
WHERE 
    上一行变量1 IS NULL  -- 保留第一行数据
    OR 变量1 != 上一行变量1 
    OR 变量2 != 上一行变量2;

按变量2分组优化方案

如果变量2是分组维度(比如示例中a、b为两个独立组),可以在窗口函数中加PARTITION BY,只对比同组内的变量1变化:

WITH ranked_rows AS (
    SELECT 
        变量1, 
        时间, 
        变量2,
        LAG(变量1) OVER (PARTITION BY 变量2 ORDER BY 时间) AS 上一行变量1
    FROM 你的表名
)
SELECT 变量1, 时间, 变量2
FROM ranked_rows
WHERE 
    上一行变量1 IS NULL 
    OR 变量1 != 上一行变量1;
四、执行查询前估算表占用空间的方法

不同数据库有原生工具可直接查看表的存储空间,无需执行数据修改操作:

MySQL/MariaDB

SELECT 
    table_name,
    ROUND(data_length/1024/1024, 2) AS 数据大小_MB,
    ROUND(index_length/1024/1024, 2) AS 索引大小_MB,
    ROUND((data_length + index_length)/1024/1024, 2) AS 总大小_MB
FROM information_schema.tables
WHERE table_schema = '你的数据库名' AND table_name = '你的表名';

也可执行SHOW TABLE STATUS LIKE '你的表名';,查看Data_length和Index_length字段。

PostgreSQL

SELECT 
    pg_size_pretty(pg_total_relation_size('你的表名')) AS 总大小,
    pg_size_pretty(pg_relation_size('你的表名')) AS 数据大小,
    pg_size_pretty(pg_indexes_size('你的表名')) AS 索引大小;

SQL Server

EXEC sp_spaceused '你的表名';

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 01:20:26