Проблема, с которой вы столкнулись, заключается в том, что вы рассчитываете максимум или минимум из элемента, используемого в группе.Вы должны удалить их из группы.И если вы не можете использовать переменные 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];
Надеюсь, это поможет!