Мне нужно обнаружить все изменения состояния в базе данных - PullRequest
0 голосов
/ 09 июля 2019

У меня есть набор адресов, я должен определить каждый из них отдельно, когда состояние изменилось. База данных выглядит следующим образом: 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 голосов
/ 09 июля 2019

В более старых версиях 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;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...