SQL Server — Получение результата после того, как один результат соответствует тому, что вам нужно

#sql #sql-server

#sql #sql-server

Вопрос:

Данные:

 DateTime                     Name           EventName    ReasonText    
2020-07-01 09:57:41.007      Joe Smith      Ready        Ready         
2020-07-01 09:57:47.000      Joe Smith      Not Ready    Pre-Shift     
  

Я пытаюсь выяснить это: Верните результат, в котором аналитик перешел в состояние «Готовности», а затем в состояние «Предварительной смены»

или

Верните результат, в котором eventName и ReasonText= Ready, а следующий результат — eventName ‘Not Ready’ и ReasonText ‘Pre-Shift’

Таблицы и столбцы, используемые для этого:

AST (eventName) RC(ReasonText)

Заранее благодарю вас.

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

1. Каков ваш ввод? Каков ожидаемый результат? Name ?

Ответ №1:

Кажется, вы хотите lead() :

Верните результат, в котором eventName и ReasonText= Ready, а следующий результат — eventName ‘Not Ready’ и ReasonText ‘Pre-Shift’

 select t.*
from (select t.*,
             lead(eventname) over (partition by name order by datetime) as next_eventname,
             lead(ReasonText) over (partition by name order by datetime) as next_ReasonText
      from t
     ) t
where eventname = 'Ready' and
      ReasonText = 'Ready' and
      next_eventname = 'Not Ready' and
      next_ReasonText = 'Pre-Shift';
  

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

1. Большое вам спасибо! Я собираюсь попробовать это 🙂