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

SQL中针对指定ID依据另一列条件计算访问时长的实现问题

问题排查与正确SQL实现

报错原因

你原有写法的两个子查询没有和外层查询的ID做关联,会返回所有ID的Sign In、Session End - Sign Out记录的时间值,多个返回结果无法作为表达式传入DATEDIFF函数,所以触发报错。此外你原语句中还有笔误,Foom需要修正为FROM。

正确查询方案

方案1:分组聚合写法(兼容性最好)

按ID分组后通过CASE语句匹配对应行为的时间,再计算差值:

SELECT 
    ID,
    DATEDIFF(second, 
        MAX(CASE WHEN Record = 'Sign In' THEN AccessedDTTM END),
        MAX(CASE WHEN Record = 'Session End - Sign Out' THEN AccessedDTTM END)
    ) AS Duration_Seconds
FROM Audit
WHERE ID IN (16, 18)
GROUP BY ID

方案2:自连接写法(逻辑更直观)

将同ID的登录、登出记录关联为一行后计算差值:

SELECT 
    a.ID,
    DATEDIFF(second, a.AccessedDTTM, b.AccessedDTTM) AS Duration_Seconds
FROM Audit a
INNER JOIN Audit b 
    ON a.ID = b.ID 
    AND a.Record = 'Sign In' 
    AND b.Record = 'Session End - Sign Out'
WHERE a.ID IN (16, 18)

两种方案返回的结果一致,以你的样例数据为例,ID16的时长为60秒,ID18的时长为987秒。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 16:30:02