首页 > 解决方案 > mySQL 查询以按类型查找一系列事件的第一个事件

问题描述

我在 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

最后一次失败事件系列的第一次失败

可能需要使用我不太擅长的窗口函数。

有人可以帮忙吗?

非常感谢。

标签: mysqlwindow-functions

解决方案


我确信还有另一种方法可以做到这一点,但我经常使用内部查询来做到这一点,并利用 min group by。

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

这是实践中的 SQL Fiddle


推荐阅读