2017-04-19 1 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-rows-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에 대해 올바른 여러 로그인 및 로그 아웃으로 인한 것일 수 있습니다. –