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

MySQL中Events Logs去重:仅提取状态变更日志的技术求助

解决MySQL中去除连续重复状态记录的问题

针对你需要筛选出仅包含状态变更的非重复日志(去除连续重复的状态记录)的需求,这里提供两种适配不同MySQL版本的可行方案:

方案一:MySQL 8.0+(使用窗口函数)

利用LAG()窗口函数可以轻松获取上一行的状态值,从而筛选出状态发生变化的记录:

SELECT date_time, status
FROM (
    SELECT 
        date_time, 
        status,
        -- 获取当前行的上一行status值
        LAG(status) OVER (ORDER BY date_time) AS prev_status
    FROM events_logs
) AS temp
-- 保留第一行(prev_status为NULL)或状态与上一行不同的记录
WHERE prev_status IS NULL OR prev_status != status;

方案二:MySQL 5.x及以下版本(使用用户变量)

如果你的MySQL版本不支持窗口函数,可以通过用户变量跟踪前一行的状态:

SELECT date_time, status
FROM (
    SELECT 
        date_time, 
        status,
        -- 先将当前状态赋值给前状态变量,再更新当前状态变量
        @prev_status := @curr_status,
        @curr_status := status
    FROM events_logs, 
         -- 初始化用户变量
         (SELECT @prev_status := NULL, @curr_status := NULL) AS vars
    -- 必须按时间排序,保证连续记录的顺序正确
    ORDER BY date_time
) AS temp
WHERE @prev_status IS NULL OR @prev_status != status;

这两种方案都会返回你期望的结果:

2023-05-01 00:00:33         Run1
2023-05-01 00:20:33         Fault1
2023-05-01 00:30:33         Run1
2023-05-01 00:50:33         Fault2
2023-05-01 00:53:33         Run1
2023-05-01 00:54:33         Fault3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 04:07:50