Итак, у нас есть таблица lds_user_log, в которой регистрируются входы и выходы из нашего CSR за день.Это нормально, и у меня есть сценарий, который рассчитан на то, чтобы получать данные о количестве минут, зарегистрированных в день для наших показателей:
IF OBJECT_ID('tempdb..#tmpLogins1') IS NOT NULL DROP TABLE #tmpLogins1
IF OBJECT_ID('tempdb..#tmpLogins') IS NOT NULL DROP TABLE #tmpLogins
SELECT T1.[user],
T1.[user_group],
T1.event_Date,
isnull( MIN(T2.event_date),'2018-05-21 17:00:0') AS Date2,
DATEDIFF(minute, T1.event_Date, isnull( MIN(T2.event_date),'2018-05-21 17:00:0')) AS minDiff
INTO #tmpLogins1
FROM [LEADS].[dbo].[lds_User_log] T1
LEFT JOIN [LEADS].[dbo].[lds_User_log] T2
ON T1.[user_group]= T2.[user_group]
AND T2.event_Date > T1.event_Date
and t1.[user]=t2.[user]
where t1.event_date>= @startdate
--AND t2.event_date <= '2018-05-21 23:00:01'
GROUP BY T1.[user], T1.[user_group], T1.event_Date;
select distinct [user],
user_group,
sum(minDiff) over (partition by [user]) as totMins
INTO #tmpLogins
from #tmpLogins1
Это возвращает:
Что опять хорошо, но некоторые из наших CSR не выходят из своей системы, что оставляет NULL в событии LOGOUT, где (потому что я не знаю другого способа сделать это) вынуждает меняиспользовать ISNULL сверху, предполагая, что они уехали в 5 вечера.
Есть ли способ, что, даже используя временные таблицы, я могу взять пользователя, у которого есть LOGINUT, но нет LOGOUT на тот же день, и вставить его в временную таблицу LOGOUT?Это потому, что мы хотим иметь возможность запускать этот отчет в течение целой недели, и некоторые представители вернутся домой и никогда не выйдут из системы (просто закрыв браузер), а затем снова войдут в систему на следующий день, никогда не создавая событие LOGOUT.Но нам нужно это как
FRI - 1st LOGIN | LAST LOGOUT
MON - 1st LOGIN | LAST LOGOUT
TUE - 1st LOGIN | LAST LOGOUT
WED - 1st LOGIN | LAST LOGOUT
THU - 1st LOGIN | LAST LOGOUT
и МИНУТЫ между каждым из них, и снова, если предположить, что они уехали в 17:00 в тот конкретный день, ЕСЛИ они не сгенерировали событие LOGOUT.
Когда я извлекаю все данные из таблицы для конкретного пользователя за вчерашний день.
select *
from LEADS.[dbo].[lds_User_log]
where [USER] = 'gunnr' AND event_date > '2018-05-21 00:00:01'
Это список:
А вот и весь список полей:
SELECT [user_log_id]
,[user]
,[event]
,[campaign_id]
,[event_date]
,[event_epoch]
,[user_group]
,[session_id]
,[server_ip]
,[extension]
,[computer_ip]
,[browser]
,[data]
,[phone_login]
,[server_phone]
,[phone_ip]
,[webserver]
,[login_url]
,[browser_width]
,[browser_height]
FROM [LEADS].[dbo].[lds_User_log]