我有这张桌子
sessionid | serviceid | requesttimestamp | etc..
我的目标是获取一个用于登录和注销的serviceid,为了便于讨论,我们将其设置为2和3。因此,当两个记录有一个登录和注销时,我希望确保sessionid相同,然后对时间戳进行datediff,以确定用户已登录多长时间。我还需要一个条件,即如果登录的serviceid存在于一个记录,而注销的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语句,但如果可能的话,我正在尝试将其转换为一个查询。任何指向正确方向的指针都很棒