我需要检测数据库中的所有状态更改

时间:2019-07-09 04:30:45

标签: mysql sql

我有一组地址,当状态改变时,我必须分别检测每个地址。该数据库如下所示:TimeSpan,Address,IsBusy。我必须这样做(按TimeSpan排序):

Address  IsBusy
610      0
610      1   <--
610      0
750      0
610      0
610      0
750      1   <--
610      1   <--
610      1
750      0
610      0
610      1   <--
750      0
610      0

对于每个地址,我需要检测0变为1的地方。

我绝对不知道如何使用SQL做到这一点 谢谢

1 个答案:

答案 0 :(得分:0)

在旧版本的MySQL中,您可以使用相关子查询:

select a.*
from (select a.*,
             (select a2.isbusy
              from addresses a2
              where a2.address = a.address and
                    a2.timespan < a.timestamp
              order by t2.timestamp desc
              limit 1
             ) as prev_isbusy
      from addresses a
     ) a
where a.isbusy = 1 and a.prev_isbusy = 0;

或者:

选择a。* 从地址a 其中a.isbusy = 1并且       (选择a2.isbusy         来自地址a2         其中a2.address = a.address和               a2.timespan

这在MySQL 8+中更加简单:

select a.*
from (select a.*,
             lag(isbusy) over (partition by address over order by timestamp) as prev_isbusy
      from addresses a
     ) a
where a.isbusy = 1 and a.prev_isbusy = 0;