2017-04-19 68 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是正確的? –