我有一组地址,当状态改变时,我必须分别检测每个地址。该数据库如下所示: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做到这一点 谢谢
答案 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;