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

如何筛选连续出现多次的记录并统计连续次数

筛选连续重复记录并统计出现次数

嘿,这个需求我之前也碰到过!要搞定数据表中连续重复记录的分组统计,核心就是把连续相同的记录归为同一组,然后统计每组的数量就行。我分两种常见场景给你详细说:

场景1:用SQL处理数据库表

假设你的数据表叫sequence_table,里面有两个关键列:

  • value:存储你要统计的序列值(比如x、y)
  • order_col:用来保证序列顺序的列(比如自增ID、时间戳,必须有这个才能判断“连续”!)

核心思路

用两个ROW_NUMBER()窗口函数生成的编号做差,得到一个分组标识——连续相同的value会得到相同的标识,这样就能把它们归为一组。

完整SQL代码

WITH grouped_data AS (
  SELECT 
    value,
    order_col,
    -- 生成全局行号(按序列顺序)
    ROW_NUMBER() OVER (ORDER BY order_col) AS global_row,
    -- 按value分组生成组内行号
    ROW_NUMBER() OVER (PARTITION BY value ORDER BY order_col) AS value_row,
    -- 两个行号的差作为分组ID,连续相同value的差不变
    ROW_NUMBER() OVER (ORDER BY order_col) - ROW_NUMBER() OVER (PARTITION BY value ORDER BY order_col) AS group_id
  FROM sequence_table
)
SELECT 
  value,
  COUNT(*) AS occurrence_count
FROM grouped_data
GROUP BY group_id, value
-- 按原序列顺序输出结果
ORDER BY MIN(order_col);

对应你的例子验证

如果你的序列是x x x y y x x y,order_col是1到8,那么group_id会是:

  • 前3个x:1-1=0、2-2=0、3-3=0 → 同一组
  • 接下来2个y:4-1=3、5-2=3 → 同一组
  • 再2个x:6-4=2、7-5=2 → 同一组
  • 最后1个y:8-3=5 → 单独一组

统计后就得到你要的结果:x 3、y 2、x 2、y 1。

场景2:用Python处理列表/内存数据

如果你的序列是在Python内存中(比如列表),用itertools.groupby可以一行搞定:

from itertools import groupby

# 你的序列
sequence = ['x', 'x', 'x', 'y', 'y', 'x', 'x', 'y']
# 分组统计
result = [(key, len(list(group))) for key, group in groupby(sequence)]

print(result)
# 输出:[('x', 3), ('y', 2), ('x', 2), ('y', 1)]

这个方法会自动把连续相同的元素归为一组,直接统计每组长度就行,非常简洁!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 12:47:41