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

SQL分区窗口下计算两行时间差:会话内反馈与启动事件间隔计算

问题原因

你原来的逻辑直接固定取每个会话的第一条feedbackProvided记录,没有和首个measurementStarted的时间做匹配过滤,也没有取时间最近的符合要求的记录,所以不符合需求。

调整方案

可以按以下逻辑修改SQL:

  1. 先提取每个会话的首个measurementStarted事件的时间
  2. 关联同会话的所有feedbackProvided事件,过滤出满足「feedbackProvided时间早于首个measurementStarted且时间差在3分钟内」的记录
  3. 每个会话取过滤后时间最新的feedbackProvided,计算和measurementStarted的时间差即可
调整后代码
WITH first_measurement AS (
  -- 提取每个会话的首个measurementStarted事件
  SELECT 
    session,
    recordedAt AS started_at
  FROM (
    SELECT 
      session,
      recordedAt,
      ROW_NUMBER() OVER(PARTITION BY session ORDER BY recordedAt ASC) AS rn
    FROM events
    WHERE type = 'measurementStarted'
  ) t
  WHERE rn = 1
),
valid_feedback AS (
  -- 关联符合3分钟时间窗口的feedbackProvided事件,按时间倒排取最近的
  SELECT 
    f.session,
    f.recordedAt AS feedback_at,
    m.started_at,
    ROW_NUMBER() OVER(PARTITION BY f.session ORDER BY f.recordedAt DESC) AS rn
  FROM events f
  JOIN first_measurement m 
    ON f.session = m.session
    AND f.type = 'feedbackProvided'
    AND f.recordedAt < m.started_at
    AND date_diff('minute', f.recordedAt, m.started_at) < 3
)
-- 计算最终时间差
SELECT 
  session,
  feedback_at,
  started_at,
  date_diff('millisecond', feedback_at, started_at) AS diff_ms
FROM valid_feedback
WHERE rn = 1
逻辑说明
  • 针对你给出的示例数据,代码会匹配到时间为2021-08-17T14:28:17.12+03:00的feedbackProvided事件(比你示例里提到的14:28:15的记录更近),计算得到的时间差约为5317毫秒。
  • 如果某会话没有符合3分钟窗口的feedbackProvided记录,关联后不会出现在结果里,自动忽略。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 05:51:00