Как определить EventStop timeStamp на основе условия, используя t SQL? - PullRequest
1 голос
/ 17 марта 2020

Я пытаюсь выяснить следующее:

  • У меня есть список временных отметок, относящихся к соответствующему состоянию машины (1 или 0)
  • Я заинтересован в создании новая таблица, в которой: первая временная метка машины переходит в состояние машины 1 (START), а временная метка машины выходит из строя (machinetate = 0, reasonID = 15) (END)

изображение 1

enter image description here

изображение 2 enter image description here

1 Ответ

0 голосов
/ 19 марта 2020

Это типичная проблема пробелов и островков, когда вы собираетесь группировать последовательные строки, имеющие одно и то же состояние.

Вот один из способов решения этой проблемы с использованием разницы между номерами строк.

select
    equipment_id,
    min(timestamp) event_start,
    max(timestamp) event_stop,
    machine_state_id,
    max(reason_id) reason_id
from (
    select 
        t.*,
        row_number() over(partition by equipment_id order by timestamp) rn1,
        row_number() over(partition by equipment_id, machine_state_id order by timestamp) rn2
    from mytable t
) t
group by equipment_id, machine_state_id, rn1 - rn2
order by equipment_id, event_start
...