Quello che chiedi mi pare difficile da fare con una sola query. Se ci riesci postala che imparero' qualcosa.
Non so che cosa aveva postato marino51 ma ti propongo questo (fatto con MySQL ma non avendo SQL express...) che puo' darti uno spunto. Poi con un linguaggio di programmazione sarà facile fare quello che vuoi.
codice:
SELECT Batch, Dalle, Alle, StateCurrent, @rank3:=@rank3+1
from
(SELECT a1.`Batch`, a1.`LocalTimeCol` as Dalle, a2.`LocalTimeCol` as Alle, a1.`StateCurrent`
FROM
(SELECT `Batch`,`LocalTimeCol`,`StateCurrent`, @rank:=@rank+1 as rank FROM `batchd`
inner join (SELECT @rank:=0) t2
order by `Batch`,`LocalTimeCol`) a1
LEFT JOIN
(SELECT `Batch`,`LocalTimeCol`,`StateCurrent`, @rank2:=@rank2+1 as rank FROM `batchd`
inner join (SELECT @rank2:=-1) t3
order by `Batch`,`LocalTimeCol`) a2
ON a1.`Batch` = a2.`Batch` and a1.`rank` = a2.`rank`
where a2.`LocalTimeCol` is not null) r0
inner join (SELECT @rank3:=0) r1
Guarda immagine.
170224-002.JPG