检索同一个表中的两个记录,并在一个查询中获取datediff

时间:2015-02-16 09:48:22

标签: sql-server datediff

我有这张桌子

sessionid | serviceid | requesttimestamp | etc..

我的目标是获取一个用于登录和注销的serviceid,为了论证,我们会说是2和3.因此,当两个记录有登录并注销时,我想确保sessionid是为了找出用户登录的时间长度,我还想要一个条件,即如果登录的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语句,但我试图将其作为一个查询,如果可能的话。任何正确方向的指针都会很棒

1 个答案:

答案 0 :(得分:3)

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

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