SQL: Разница дат для дат в одном столбце - PullRequest
0 голосов
/ 21 мая 2018

Я пытаюсь зарегистрировать часы для каждого из наших CSR.

Запрос, который я пытаюсь выполнить, чтобы получить данные:

SELECT  T1.user_log_id,
        T1.[user], 
        min(T1.event_date) AS Date1, 
        max(T2.event_date) AS Date2, 
       DATEDIFF(hour, T1.event_date, T2.event_date) AS DaysDiff
FROM    leads.dbo.lds_User_log T1
        JOIN leads.dbo.lds_User_log  T2
            ON T1.user_log_id = T2.user_log_id
            --AND T2.event_date >= T1.event_date
WHERE T1.event_date between '2018-05-18 00:00:01' AND '2018-05-18 23:00:01' 
GROUP BY T1.user_log_id, T1.event_Date, T2.event_date, T1.[user];

и выдает: enter image description here

Внутри таблицы у нас есть:

enter image description here

честно говоря, я понятия не имею, как кормитьданные в себя, чтобы получить LOGIN и событие LOGOUT из БД, чтобы правильно запустить DATEDIFF, и я законно потерян.

1 Ответ

0 голосов
/ 21 мая 2018

Проблема, с которой вы столкнулись, заключается в том, что вы рассчитываете максимум или минимум из элемента, используемого в группе.Вы должны удалить их из группы.И если вы не можете использовать переменные Date1 & Date2 в diff, это зависит от того, с какой БД вы выполняете этот запрос, вы не можете попробовать это, используя предварительно вычисленные таблицы в FROM и JOIN.

Вы можете попробовать следующие решения:

SELECT  T1.user_log_id,
        T1.[user], 
        min(T1.event_date) AS Date1, 
        max(T2.event_date) AS Date2, 
       DATEDIFF(hour, Date1, Date2) AS DaysDiff
FROM    leads.dbo.lds_User_log T1
        JOIN leads.dbo.lds_User_log  T2
            ON T1.user_log_id = T2.user_log_id
WHERE T1.event_date between '2018-05-18 00:00:01' AND '2018-05-18 23:00:01' 
GROUP BY T1.user_log_id, T1.[user];

Если переменные не могут быть использованы в одном и том же выборе, вы не можете справиться с этим следующим образом:

SELECT  T1.user_log_id,
        T1.[user], 
        T1.MinEventDate,
        T2.MaxEventDate,
       DATEDIFF(hour, T1.MinEventDate, T2.MaxEventDate) AS DaysDiff
FROM    (SELECT user_log_id,[user],min(event_date) as MinEventDate 
            FROM leads.dbo.lds_User_log
            WHERE event_date between '2018-05-18 00:00:01' AND '2018-05-18 23:00:01' 
            GROUP BY user_log_id,[user]) T1
        JOIN (SELECT user_log_id,[user],max(event_date) as MaxEventDate 
            FROM leads.dbo.lds_User_log
            WHERE event_date between '2018-05-18 00:00:01' AND '2018-05-18 23:00:01' 
            GROUP BY user_log_id,[user]) T2
            ON T1.user_log_id = T2.user_log_id
GROUP BY T1.user_log_id, T1.[user];

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...