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

SQL需求:统计每日首个False出现前的连续True行数

解决按日期统计首个False前连续True行数的SQL问题

数据表结构与数据

datehourflag
2024-04-1323True
2024-04-1322True
2024-04-1321True
2024-04-1320False
2024-04-1319True
2024-04-1318True
2024-04-1220False
2024-04-1219True
2024-04-1218True
2024-04-1217True
2024-04-1216True
2024-04-1215True
2024-04-1122True
2024-04-1118True
2024-04-1115False
2024-04-1110True
2024-04-119False
2024-04-118True
2024-04-1010True
2024-04-109True
2024-04-106True
2024-04-103False

需求

按日期分组,每组数据按hour降序排列,统计每组中首个False出现之前连续的True的行数。备注:hour降序排列可能存在间隔,仍按行数统计。

预期结果

datecount
2024-04-133
2024-04-120
2024-04-112
2024-04-103

SQL解决方案

思路

核心是按日期分组后,先对每组按hour降序排序,标记出首个False之前的所有True行,最后统计数量。可以通过窗口函数的累积特性或行号定位实现。

方法一:行号定位法

WITH ranked_data AS (
    SELECT 
        date,
        flag,
        -- 按日期分组,hour降序生成行号
        ROW_NUMBER() OVER (PARTITION BY date ORDER BY hour DESC) AS rn,
        -- 找到每组中首个False的行号
        MIN(CASE WHEN flag = FALSE THEN ROW_NUMBER() OVER (PARTITION BY date ORDER BY hour DESC) END) OVER (PARTITION BY date) AS first_false_rn
    FROM your_table_name
)
SELECT 
    date,
    -- 统计行号小于首个False位置的True行数,无符合条件则为0
    COUNT(CASE WHEN rn < first_false_rn AND flag = TRUE THEN 1 END) AS count
FROM ranked_data
GROUP BY date
ORDER BY date DESC;

方法二:累积标记法(更简洁)

WITH ordered_data AS (
    SELECT 
        date,
        flag,
        -- 累积求和,遇到False后标记为1,未遇到时为0
        SUM(CASE WHEN flag = FALSE THEN 1 ELSE 0 END) OVER (PARTITION BY date ORDER BY hour DESC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS has_encountered_false
    FROM your_table_name
)
SELECT 
    date,
    -- 统计未遇到False前的True行数
    COUNT(CASE WHEN has_encountered_false = 0 AND flag = TRUE THEN 1 END) AS count
FROM ordered_data
GROUP BY date
ORDER BY date DESC;

解释

  • 方法一:先给每组数据按hour降序生成行号,定位出首个False的位置,再统计该位置之前的True行数。如果首行就是False,自然没有符合条件的行,count为0。
  • 方法二:用累积求和标记是否已遇到False,首个False之前的行标记为0,之后为1,直接统计标记为0的True行数即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 08:25:09