Я хочу добиться того же результата, но другим способом … другая логика

#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) даты и времени для каждого триггера
Триггеры

  1. войти
  2. NOT_READY
  3. ГОТОВО
  4. ЗАНЯТО
  5. ПРЕРВАННЫЙ
  6. НЕИЗВЕСТНО
  7. Выход

Упомянутые выше триггеры. Сеанс начнется с триггера «Login» и завершится триггером «Logout». Я пытаюсь создать новый столбец «Login_Time», который должен отображать время входа в сеанс перед каждым триггером. Когда агент выйдет из системы и затем снова войдет в систему, сработает триггер «Login», и теперь в столбце «Login_Time» должна отображаться новая отметка времени входа в систему.

С помощью этого нового столбца «Login_Time» я смогу определить, какой триггер был запущен в каком сеансе

Результирующий набор приведенного выше запроса

Комментарии:

1. Если кому-то нужен сценарий таблицы, это также может быть предоставлено

2. Да, мне нужна запрошенная информация. Прикрепленный рисунок представляет результирующий набор, который возвращает приведенный выше запрос. Я хочу понять, как можно получить тот же набор результатов, но из другой логики sql. Например, в приведенном выше запросе используется функция LEAD, теперь я пытаюсь придумать другой способ получить тот же набор результатов, но без использования функции LEAD.

3. «… из другой логики SQL» не имеет смысла для меня? Зачем вам другая логика? Какая другая логика?

4. Для меня это звучит как вопрос о наилучшей практике, а не сломанный код. Что-то, что не подходит для SO. Может быть, что-то вроде Code Review больше подходит для этого вопроса?