在同一 table 中检索两条记录并在一次查询中获取 datediff

Retrieve two records within the same table and get datediff in one query

我有这个table

sessionid | serviceid | requesttimestamp | etc..

我的目标是获取用于登录和注销的 serviceid,为了参数我们将其称为 2 和 3。因此,当这两个记录有登录和注销时,我想确保 sessionid是相同的,然后 datediff 时间戳以找出用户登录了多长时间。我还想要一个条件,如果用于登录的 serviceid 存在于一个并且不存在用于注销然后跳过该记录结果。我想知道是否有一种神奇的方法可以将其组合到一个查询中,到目前为止我已经

Declare @sessionStart DATETIME , @sessionStart2 as DATETIME
set @sessionStart = (select  requesttimestamp from logentry where serviceid=151 and sessionid = '1234')
set @sessionStart2 = (select requesttimestamp from logentry where serviceid=202 and sessionid = '1234')


select datediff(mi, @sessionStart, @sessionStart2 );

这使我无需空值检查就可以返回所需的结果,我一直在研究简单的 case 语句,但如果可能的话,我试图将其合并为一个查询。任何指向正确方向的指针都会很棒

有点令人困惑的解释。 :) 但换句话说,我的理解是您只需要每个会话的登录时间的总分钟数。你的sessionid是唯一的吗?此外,您标记了 MYSQL 和 SQL 服务器,而您的语法是 SQL 服务器。

IE,这样的,然后呢?

SELECT L1.sessionid, DATEDIFF(MI, L1.requesttimestamp, L2.requesttimestamp) LOG_TIME_IN_MINUTES
FROM logentry L1
JOIN logentry L2 ON L2.sessionid  = L1.sessionid
WHERE L1.requesttimestamp IS NOT NULL AND L2.requesttimestamp IS NOT NULL
AND L1.serviceid = 2 AND L2.serviceid = 3