Запрос MySQL для поиска первого события в серии событий по типу

#mysql #window-functions

Вопрос:

У меня есть таблица событий в MySQL, в которой хранятся события, которые могут завершиться со статусом или success или failed .

Я хочу найти первую неудачу из серии последних неудачных событий.

например:

  id  time     status
------------------
  1  10:00   success
  2  10:01   success
  3  10:03   failed
  4  10:04   failed
  5  10:05   success
  6  10:06   success
  8  10:07   failed
  9  10:07   failed
  10 10:07   failed
 

Мне нужен запрос, который вернет 8 10:07 failed

первый сбой в серии последних неудачных событий

вероятно, нужно использовать функцию окна, в которой я не так хорош.

Кто-нибудь может помочь, пожалуйста?

Большое спасибо.

Ответ №1:

Я уверен, что есть другой способ сделать это, но я часто делаю это с помощью внутреннего запроса и использую минимальную группу.

 select
    d.*
from data d
inner join (
    select 
        min(id) id, 
        time 
    from data 
    group by time
) l on d.id = l.id
 

Вот пример этого на практике