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

MySQL如何匹配指定值后取后续5行并统计各数值出现次数

MySQL实现方案

我们默认示例中的表名为num_records,包含id、number两个字段,以下提供两种适用不同场景的实现方式:


场景1:id为连续自增主键

可以直接通过id差值匹配数据,写法最简洁:

SELECT 
  t2.number AS `Number`, 
  COUNT(*) AS `Count`
FROM num_records t1
JOIN num_records t2 
  ON t1.number = 0 
  AND t2.id > t1.id 
  AND t2.id - t1.id <= 5
GROUP BY t2.number
ORDER BY COUNT(*) DESC;

如果需要先查看匹配到的所有明细行,只需去掉外层统计逻辑即可:

SELECT t2.id, t2.number
FROM num_records t1
JOIN num_records t2 
  ON t1.number = 0 
  AND t2.id > t1.id 
  AND t2.id - t1.id <= 5

场景2:id不连续(通用兼容版)

通过窗口函数生成连续行号再匹配,不受id连续性影响:

WITH ordered_records AS (
  SELECT *, ROW_NUMBER() OVER(ORDER BY id) AS row_num
  FROM num_records
)
SELECT 
  t2.number AS `Number`,
  COUNT(*) AS `Count`
FROM ordered_records t1
JOIN ordered_records t2
  ON t1.number = 0
  AND t2.row_num > t1.row_num
  AND t2.row_num - t1.row_num <= 5
GROUP BY t2.number
ORDER BY COUNT(*) DESC;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:06:09