2017-04-19 70 views
0

我刚刚尝试创建活动报告的SQL新手,我在表上存储过程和触发器以记录登录和注销日期/时间。SQL时间参数计算

SQL Table Image

我如何计算时间一些建议之后,从第一个日志先后在持续注销每天?

任何指导将不胜感激谢谢。

+1

要想从这个社会最好的帮助将是巨大的,如果你能告诉我们,你使用的是什么SQL数据库,分享自己当前的代码,并解释你到目前为止已经试过。 –

+0

我正在使用SQL 2008 R2 –

+1

[T-SQL脚本来计算多行之间的时间差异]的可能重复(http://stackoverflow.com/questions/24518781/t-sql-script-to-calculate-time-difference -between-multiple-rows) –

回答

0
SELECT A.*, 
     DATEDIFF(second,B.firstloginonthatday,B.lastlogoutonthatday) AS time_elapsed 
    FROM YourTable A 
INNER JOIN 
    (  SELECT Z.USERID, 
        CONVERT(DATE,Z.DATE_TIME) AS ONLYDATE, 
        MIN(Z.DATE_TIME) AS firstloginonthatday, 
        MAX(Z.DATE_TIME) AS lastlogoutonthatday 
       FROM 
       (
        SELECT *, 
          ROW_NUMBER() 
          OVER 
          (PARTITION BY USERID,CONVERT(DATE,DATE_TIME) ORDER BY CASE WHEN action = 'logout' THEN DATE_TIME 
           ELSE NULL END 
          ) AS lastlogout_rn,    
          ROW_NUMBER() 
          OVER 
          (PARTITION BY USERID,CONVERT(DATE,DATE_TIME) ORDER BY CASE WHEN action = 'login' THEN DATE_TIME 
           ELSE NULL END 
          ) AS firstlogin_rn  
         FROM Yourtable 
       ) Z 
      WHERE Z.lastlogout_rn = 1 OR Z.firstlogin_rn = 1 
      GROUP BY Z.USERID,CONVERT(DATE,Z.DATE_TIME) 
    ) B 
    ON A.USERID = B.USERID 
    AND CONVERT(DATE,A.DATE_TIME) = B.ONLYDATE; 
+0

你好,感谢你的代码,非常感谢。由于某些原因,20170418的时间计算不正确,我假设这可能是由于多次登录和退出导致的,因为20170419是正确的? –