У меня есть таблица идентификаторов, которая обновляется с кодом состояния и отметкой времени каждый раз, когда происходит обновление для этого идентификатора, например:
ID STATUS TIMESTAMP
------------------------------------
12345 10 2020-08-01 11:00:01
12345 20 2020-08-01 11:01:24
12345 30 2020-08-01 11:07:42
Я хочу, чтобы все изменения состояния и время в одной строке, поэтому я получаю:
ID STATUS TIMESTAMP STATUS TIMESTAMP STATUS TIMESTAMP
-----------------------------------------------------------------------------------------------------
12345 10 2020-08-01 11:00:01 20 2020-08-01 11:01:24 30 2020-08-01 11:07:42
Я могу сделать это, выполнив объединение для каждого статуса, поэтому мой запрос выглядит следующим образом:
with T1 as
(SELECT distinct
id as 'ID',
Status as 'STATUS',
Timestamp as 'Time10'
from StatusHistory S
where TimeStamp > '2020-01-07 11:00'
and Timestamp < '2020-01-07 11:10'
and Status = '10'),
T2 as
(SELECT distinct
id as 'ID',
Status as 'STATUS',
Timestamp as 'Time20'
from StatusHistory S
where TimeStamp > '2020-01-07 11:00'
and Timestamp < '2020-01-07 11:10'
and Status = '20')
Select * from T1
join T2 on T1.ID = T2.ID
This работает, но тогда я должен сделать это для каждого статуса, и есть около 12 различных кодов состояния. Я прочитал несколько примеров выполнения скоростного объединения и понял концепцию, но у меня возникли большие проблемы с ее применением к моему запросу. По сути, я хочу сказать, что для рекурсивного бита это Status = Previous Status + 10
, , но как это реализовать, проблематично.
Я не понимаю, как получить самый последний статус и добавьте к нему 10.