2017-04-19 6 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のために複数のログインとログアウトが原因である可能性があると想定していますか? –

関連する問題