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

如何为SQL查询添加CONSECUTIVE条件,统计相同连续值的行

实现连续相同结果的tFK统计需求

我来帮你搞定这个连续相同结果的统计需求!首先明确核心目标:我们要找出连续出现恰好(或至少)@variable次相同结果的tFK,结合你的预期案例,下面用SQL窗口函数来实现这个逻辑。

假设你的数据表结构大致如下(如果字段名不同,替换成你实际的字段即可):

CREATE TABLE your_table (
    tFK INT,
    result VARCHAR(50), -- 存储结果的字段
    record_date DATE -- 记录日期,用于排序确定顺序
);

实现步骤与代码

我们可以通过以下几步来添加连续条件:

  1. 给每个tFK的记录按日期排序,标记行号;
  2. 对比当前记录与上一条记录的result,生成连续分组标识;
  3. 按tFK和分组标识统计连续相同结果的次数;
  4. 筛选出连续次数匹配@variable的tFK。

完整SQL代码如下:

DECLARE @variable INT = 2; -- 这里可以替换成你需要的数值,比如3

WITH ranked_records AS (
    -- 步骤1:按tFK分组,按日期排序,给每条记录标行号
    SELECT 
        tFK,
        result,
        record_date,
        ROW_NUMBER() OVER (PARTITION BY tFK ORDER BY record_date) AS row_num
    FROM your_table
),
grouped_consecutive AS (
    -- 步骤2:生成连续相同结果的分组ID
    SELECT 
        tFK,
        result,
        -- 当当前result和上一条不同时,分组ID+1
        SUM(CASE WHEN result = LAG(result) OVER (PARTITION BY tFK ORDER BY row_num) THEN 0 ELSE 1 END) 
            OVER (PARTITION BY tFK ORDER BY row_num) AS consecutive_group_id
    FROM ranked_records
),
consecutive_counts AS (
    -- 步骤3:统计每个tFK分组的连续次数
    SELECT 
        tFK,
        COUNT(*) AS consecutive_times
    FROM grouped_consecutive
    GROUP BY tFK, consecutive_group_id
)
-- 步骤4:筛选出连续次数等于@variable的tFK
SELECT DISTINCT tFK
FROM consecutive_counts
WHERE consecutive_times = @variable;

逻辑说明

  • 窗口函数LAG():用来获取当前记录的上一条同tFK记录的result,判断是否连续相同;
  • SUM() OVER():生成分组ID,每次结果变化时分组ID递增,这样同一个连续相同结果的记录会被分到同一个组;
  • 最后通过分组统计每组的记录数,筛选出次数匹配@variable的tFK,用DISTINCT避免重复输出同一个tFK。

匹配你的预期案例

  • 当@variable = 2时,这段SQL会找出所有有连续2次相同结果的tFK,对应你预期的tFK=2;
  • 当@variable = 3时,会找出有连续3次相同结果的tFK,对应你预期的tFK=1。

如果你的需求是“连续至少@variable次”,只需要把最后一行的=改成>=即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:25:03