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
相关产品推荐
相关产品推荐

