根据 SQL 中另一列中特定 ID 的条件计算持续时间

Calculate Duration based on a criteria in another column in SQL for specific IDs

我有一个名为 Audit 的 table,如下所示:

ID Record AccessedDTTM
16 Sign In 2021-03-23 04:41:33.770
16 Session End - Sign Out 2021-03-23 04:42:33.770
17 Sign In 2021-03-01 00:03:04.070
17 Session End - Sign Out 2021-03-01 00:33:52.717
18 Sign In 2021-03-01 01:31:00.527
18 Schedule 2021-03-01 01:31:31.407
18 Charge 2021-03-01 01:43:27.427
18 Session End - Sign Out 2021-03-01 01:47:27.940

我需要计算 Id 为 16 和 18 的用户访问的持续时间。持续时间应基于他们的登录记录和会话结束 - 注销条目。

我试过这个查询: select DateDiff(秒,(Select AccessedDTTM from Audit Where Record = 'Sign In'),(Select AccessedDTTM from Audit Where Record = 'Session End - Sign Out')) 作为持续时间 Foom 审计 其中 ID 在 (16, 18)

但是我收到如下错误: 子查询返回了 1 个以上的值。当子查询跟在 =、!=、<、<=、>、>= 或子查询用作表达式时,这是不允许的。

有人可以帮我进行正确的查询来获得这个结果吗?提前致谢!

您可以使用条件聚合:

select id,
       datediff(second, 
                min(case when Record = 'Sign in' then AccessedDTTM end),
                max(case when Record = 'Session End - Sign Out' then AccessedDTTM end)
               ) as diff
from audit
where id in (16, 18)
group by id;

对数据做出一些合理的假设,你可以将其简化为:

select id,
       datediff(second, min(AccessedDTTM), max(AccessedDTTM)
               ) as diff
from audit
where id in (16, 18) and
      record in ('Sign in', 'Session End - Sign Out')
group by id;