У меня есть таблица, в которой разные устройства регистрируют свой статус с меткой времени, как показано в приведенной ниже таблице. (значение статуса либо "нормально", либо "ошибка"). Примечание. При включении их обновления в таблицу отсутствуют правила. Например, две или три записи с предупреждением могут наступать друг на друга.
Я пытаюсь получить SQL-запрос, который может привести к следующему результату. Любая помощь будет оценена по достоинству.
это классическая проблема островов и разломов. Найдите его, и вы найдете много ссылок на этот
select DeviceID,
[Fault Start] = min(DateTime),
[Fault End] = max(DateTime),
[Total Fault Time] = convert(varchar(8),
dateadd(second,
datediff(second,
min(DateTime),
max(DateTime)),
0),
108),
[Message] = max(Message)
from
(
select *,
grp = ID - row_number() over (order by Status, ID)
from your_log_table
) d
where Status = 'Fault'
group by DeviceID, grp
MySQL
илиSQL Server
?