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

Flux查询需求:从查询结果中移除连续重复值

过滤连续重复值的行

需要查询全量数据,但跳过结果中与上一行value值相同的行,仅保留值发生变化的行(包括首次出现的行)。

示例原始数据

{ time: 0, value: 3}
{ time: 1, value: 4}
{ time: 2, value: 5}
{ time: 3, value: 5}
{ time: 4, value: 3}
{ time: 5, value: 3}
{ time: 6, value: 2}
{ time: 7, value: 1}
{ time: 8, value: 2}

期望输出结果

{ time: 0, value: 3}
{ time: 1, value: 4}
{ time: 2, value: 5}
{ time: 4, value: 3}
{ time: 6, value: 2}
{ time: 7, value: 1}
{ time: 8, value: 2}

1. SQL实现(以MySQL为例)

利用窗口函数LAG()获取上一行的value,筛选当前行与上一行值不同的记录:

SELECT time, value
FROM (
    SELECT 
        time, 
        value,
        LAG(value) OVER (ORDER BY time) AS prev_value
    FROM your_table
) AS temp
WHERE prev_value IS NULL OR value != prev_value
ORDER BY time;
  • LAG(value) OVER (ORDER BY time):按time排序,获取当前行的上一行value
  • 过滤条件保留首次行(prev_value IS NULL)和值变化的行

2. Python实现(处理字典列表)

如果数据是内存中的列表,遍历并保留值变化的行:

data = [
    {"time": 0, "value": 3},
    {"time": 1, "value": 4},
    {"time": 2, "value": 5},
    {"time": 3, "value": 5},
    {"time": 4, "value": 3},
    {"time": 5, "value": 3},
    {"time": 6, "value": 2},
    {"time": 7, "value": 1},
    {"time": 8, "value": 2}
]

result = []
prev_value = None
for item in data:
    if item["value"] != prev_value:
        result.append(item)
        prev_value = item["value"]

# 打印结果
for row in result:
    print(row)

遍历过程中记录上一行的value,仅当当前行值不同时才加入结果列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 22:13:22