#sql #sql-server
#sql #sql-сервер
Вопрос:
SELECT
ASE.event_time, ASE.State, ASE.Agent_id,
CASE WHEN ASE.state = 'LOGIN' THEN event_time else b.login_time END AS Login_time
FROM
AGENT_MRD_STATE_EVENTS As ASE
LEFT JOIN
( SELECT DISTINCT
a.agent_id,
event_time login_time,
ISNULL(LEAD(event_time) OVER (PARTITION BY A.AGENT_ID ORDER BY event_time ), b.logout_DATE) next_login_time
FROM
AGENT_MRD_STATE_EVENTS A
LEFT JOIN
(SELECT DISTINCT
agent_id,
event_time logout_date,
ISNULL( LEAD(event_time) OVER (PARTITION BY AGENT_ID ORDER BY event_time), A.event_time) last_logout
FROM
AGENT_MRD_STATE_EVENTS A
WHERE
agent_id = 4037
and event_time BETWEEN '2020-11-12 00:00:00' AND '2020-11-12 23:59:59'
AND state = 'LOGOUT')B
ON a.agent_id = b.agent_id
AND b.last_logout = b.logout_date
WHERE event_time BETWEEN '2020-11-12 00:00:00' and '2020-11-12 23:59:59'
and a.agent_id = 4037
AND state = 'LOGIN') B
ON
ASE.agent_id = b.agent_id
AND ASE.event_time > b.login_time
and ASE.event_time <= b.next_login_time
WHERE ASE.event_time BETWEEN '2020-11-12 00:00:00' AND '2020-11-12 23:59:59'
and ASE.agent_id = 4037
ORDER BY ASE.agent_id,ASE.event_time
Этот код создает новый столбец (Login_Time) даты и времени для каждого триггера
Триггеры
- войти
- NOT_READY
- ГОТОВО
- ЗАНЯТО
- ПРЕРВАННЫЙ
- НЕИЗВЕСТНО
- Выход
Упомянутые выше триггеры. Сеанс начнется с триггера «Login» и завершится триггером «Logout». Я пытаюсь создать новый столбец «Login_Time», который должен отображать время входа в сеанс перед каждым триггером. Когда агент выйдет из системы и затем снова войдет в систему, сработает триггер «Login», и теперь в столбце «Login_Time» должна отображаться новая отметка времени входа в систему.
С помощью этого нового столбца «Login_Time» я смогу определить, какой триггер был запущен в каком сеансе
Комментарии:
1. Если кому-то нужен сценарий таблицы, это также может быть предоставлено
2. Да, мне нужна запрошенная информация. Прикрепленный рисунок представляет результирующий набор, который возвращает приведенный выше запрос. Я хочу понять, как можно получить тот же набор результатов, но из другой логики sql. Например, в приведенном выше запросе используется функция LEAD, теперь я пытаюсь придумать другой способ получить тот же набор результатов, но без использования функции LEAD.
3. «… из другой логики SQL» не имеет смысла для меня? Зачем вам другая логика? Какая другая логика?
4. Для меня это звучит как вопрос о наилучшей практике, а не сломанный код. Что-то, что не подходит для SO. Может быть, что-то вроде Code Review больше подходит для этого вопроса?