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

SQL中基于对应ID计算startTime与endTime的时间差(无需新建表)

解决方案

针对每个ID计算endTime与startTime的时间差,可通过以下两种方式直接查询,无需创建新表,同时解决你之前用LAG/LEAD时跨ID取值的问题:

方法1:条件聚合(推荐,适配每个ID仅一对start/end的场景)

SELECT
    ID,
    -- 计算时间差并转换为秒
    EXTRACT(EPOCH FROM (MAX(CASE WHEN TypeTime = 'endTime' THEN DateTime END) - MAX(CASE WHEN TypeTime = 'startTime' THEN DateTime END))) AS "Duration (s)"
FROM
    your_table_name
GROUP BY
    ID;

方法2:修正窗口函数用法

如果偏好使用LAG/LEAD,需按ID分区,确保仅在同一ID范围内取前后行:

WITH time_pairs AS (
    SELECT
        ID,
        DateTime,
        LEAD(DateTime) OVER (PARTITION BY ID ORDER BY TypeTime) AS end_time
    FROM
        your_table_name
    WHERE
        TypeTime = 'startTime'
)
SELECT
    ID,
    EXTRACT(EPOCH FROM (end_time - DateTime)) AS "Duration (s)"
FROM
    time_pairs;

适配不同数据库的时间差函数

若你的数据库不支持EXTRACT(EPOCH FROM ...),可替换为对应数据库的时间差函数:

  • MySQL:TIMESTAMPDIFF(SECOND, MAX(CASE WHEN TypeTime='startTime' THEN DateTime END), MAX(CASE WHEN TypeTime='endTime' THEN DateTime END))
  • SQL Server:DATEDIFF(second, MAX(CASE WHEN TypeTime='startTime' THEN DateTime END), MAX(CASE WHEN TypeTime='endTime' THEN DateTime END))

最终查询结果

IDDuration (s)
160
2240
3360

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 05:05:54