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

如何编写SQL查询获取type='G'事件对应Z事件的起止时间区间

解决方案

通用兼容写法(支持所有SQL方言)

通过相关子查询为每个G事件匹配后续时间最近的Z=0事件:

SELECT
    g.t AS t1,
    (
        SELECT z.t
        FROM event z
        WHERE z.event = 'Z' 
          AND z.value = 0 
          AND z.t > g.t
        ORDER BY z.t ASC
        LIMIT 1
    ) AS t2
FROM event g
WHERE g.event = 'type' 
  AND g.value = 'G'
ORDER BY t1;

高性能写法(支持MySQL 8.0+/PostgreSQL/SQL Server等支持CTE的数据库)

通过CTE分别提取G事件和Z=0事件,再关联取最小匹配值,大数据量下性能更优:

WITH g_events AS (
    -- 提取所有G事件的时间作为t1来源
    SELECT t AS t1
    FROM event
    WHERE event = 'type' AND value = 'G'
),
z0_events AS (
    -- 提取所有Z=0事件的时间作为t2候选
    SELECT t AS t2
    FROM event
    WHERE event = 'Z' AND value = 0
)
SELECT
    t1,
    MIN(t2) AS t2
FROM g_events
-- 关联大于G事件时间的Z=0事件,取最小的就是对应区间结束时间
INNER JOIN z0_events ON z0_events.t2 > g_events.t1
GROUP BY t1
ORDER BY t1;

说明

如果存在部分G事件没有对应的后续Z=0事件,上述查询中t2会返回NULL,如需过滤这类无效区间,可以在查询末尾添加HAVING t2 IS NOT NULL条件。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 17:39:03