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

按Product ID分组,查询连续10个时间戳符合条件首行的SQL需求

高效查询连续10个符合条件时间戳的首个记录

针对你的需求,用窗口函数分组连续区间的方式可以大幅提升性能,避免生成列表的低效操作。核心思路是先标记符合条件的行,再把连续的时间戳归为同一分组,最后筛选出分组内记录数≥10的组,取每组的首个时间戳。

具体SQL实现

WITH qualified_rows AS (
    -- 筛选符合measure范围的行,生成连续分组标识
    SELECT 
        productid,
        timestamp,
        -- 连续时间戳的行会得到相同的group_id
        DATEDIFF(minute, '1970-01-01', timestamp) - 
        ROW_NUMBER() OVER (PARTITION BY productid ORDER BY timestamp) AS group_id
    FROM your_table_name
    WHERE measure BETWEEN 4 AND 5
),
group_counts AS (
    -- 统计分组记录数,筛选出至少10条的分组
    SELECT 
        productid,
        group_id,
        MIN(timestamp) AS first_timestamp,
        COUNT(*) AS record_count
    FROM qualified_rows
    GROUP BY productid, group_id
    HAVING COUNT(*) >= 10
)
-- 输出每个产品对应的首个符合条件时间戳
SELECT productid, first_timestamp
FROM group_counts
ORDER BY productid, first_timestamp;

性能优化说明

  • 窗口函数的计算效率远高于生成列表再判断连续性的逻辑,避免了大量自关联或递归操作
  • 利用时间戳转分钟数与行号的差值生成分组ID,直接将连续时间戳的行归为一组,后续仅需一次分组聚合
  • 主键(productid, timestamp)可被窗口函数和分组操作直接利用,大幅降低索引扫描开销

如果你的数据库不支持DATEDIFF(minute, ...),可替换为对应数据库的时间转分钟数函数(比如PostgreSQL用EXTRACT(EPOCH FROM timestamp)::INT / 60),核心逻辑保持不变。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 21:29:58