Oct 31, 2018

User Login Logout History by company in sql server (MS SQL)

DECLARE @UTCUNIT INT;
DECLARE @YEAR INT;
DECLARE @DATE NVARCHAR(10);

SET @UTCUNIT = 9; --KOREA STANDARD TIME
SET @YEAR = 2018;
SET @DATE = '2018-10-01';

SELECT
USERTIMESHEETLIST.COMPANY,
    USERTIMESHEETLIST.USERID,
    USERTIMESHEETLIST.TYPE,
    USERTIMESHEETLIST.LOGIN_DATE,
    DATEPART(HOUR,USERTIMESHEETLIST.LOGIN_TIME) AS LOGIN_TIMEUNIT,
    USERTIMESHEETLIST.LOGIN_TIME,
    USERTIMESHEETLIST.LOGOUT_DATE,
    DATEPART(HOUR,USERTIMESHEETLIST.LOGOUT_TIME) AS LOGOUT_TIMEUNIT,
    USERTIMESHEETLIST.LOGOUT_TIME
FROM (SELECT
USERCOMPANY.COMPANY,
        USERTIMESHEET.USERID,
        USERTIMESHEET.TYPE,
        MIN(USERTIMESHEET.LOGIN_DATE) AS LOGIN_DATE,
        MIN(DATEPART(HOUR,USERTIMESHEET.LOGIN_TIME)) AS LOGIN_TIMEUNIT,
        MIN(USERTIMESHEET.LOGIN_TIME) AS LOGIN_TIME,
        MAX(USERTIMESHEET.LOGOUT_DATE) AS LOGOUT_DATE,
        MAX(DATEPART(HOUR,USERTIMESHEET.LOGOUT_TIME)) AS LOGOUT_TIMEUNIT,
        MAX(USERTIMESHEET.LOGOUT_TIME) AS LOGOUT_TIME
        FROM (SELECT
                USERID,
                CASE
                  WHEN TYPE = 0 THEN 'LOGIN'
                  WHEN TYPE = 1 THEN 'CHANGE PASSWORD'
                END AS TYPE,
                CAST(DATEADD(HH, 9, CREATEDDATETIME) AS DATE) AS LOGIN_DATE,
                CAST(DATEADD(HH, 9, CREATEDDATETIME) AS TIME) AS LOGIN_TIME,
                CASE
                  WHEN LOGOUTDATETIME = '1900-01-01 00:00:00.000' THEN CAST(DATEADD(HH, 9, CREATEDDATETIME) AS DATE) -- 비정상 LOGOUT으로 인해 타임이 없는 경우 로그인 일자로 처리
                  WHEN LOGOUTDATETIME != '1900-01-01 00:00:00.000' THEN CAST(DATEADD(HH, 9, LOGOUTDATETIME) AS DATE)
                END AS LOGOUT_DATE,
                CASE
                  WHEN LOGOUTDATETIME = '1900-01-01 00:00:00.000' THEN '23:59:59.000' -- 비정상 LOGOUT으로 인해 타임이 없는 경우 그날 마지막 시간으로 처리
                  WHEN LOGOUTDATETIME != '1900-01-01 00:00:00.000' THEN CAST(DATEADD(HH, 9, LOGOUTDATETIME) AS TIME)
                END AS LOGOUT_TIME
            FROM SYSUSERLOG
            WHERE TYPE = 0
            AND CREATEDDATETIME != '1900-01-01 00:00:00.000') AS USERTIMESHEET
        INNER JOIN USERINFO AS USERCOMPANY
        ON USERCOMPANY.ID = USERTIMESHEET.USERID
        WHERE 1=1
        AND YEAR(USERTIMESHEET.LOGIN_DATE) = @YEAR
        AND USERTIMESHEET.LOGIN_DATE = @DATE
        GROUP BY USERCOMPANY.COMPANY,
                 USERTIMESHEET.USERID,
                 USERTIMESHEET.TYPE,
        USERTIMESHEET.LOGIN_DATE) AS USERTIMESHEETLIST

No comments:

Post a Comment