Hola emiajsiul:
Lamentablemente no estoy familiarizado con el tipo de consultas que te propuso el compañero gnzsoloyo, estos sólo los había visto aplicados en SQL Server, así es que me imagino que existe alguna forma de corregir para que te dé la salida que necesitas, pues creo que sería más eficiente que lo que voy a proponerte.
Por lo pronto, y retomando la idea de la liga que te pasé podrías hacerlo más o menos así:
Código SQL:
Ver originalmysql> CREATE TABLE Vales (KM REAL, LITROS REAL);
Query OK, 0 ROWS affected (0.23 sec)
mysql> INSERT INTO Vales VALUES (261253.000, 43.668), (261504.000,33.349),
-> (261911.000,43.668), (262245.000,35.388), (262522.000,37.575);
Query OK, 5 ROWS affected (0.06 sec)
Records: 5 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM Vales;
+--------+--------+
| KM | LITROS |
+--------+--------+
| 261253 | 43.668 |
| 261504 | 33.349 |
| 261911 | 43.668 |
| 262245 | 35.388 |
| 262522 | 37.575 |
+--------+--------+
5 ROWS IN SET (0.00 sec)
mysql> SELECT V3.UKM, V3.PKM, V2.LITROS, (V3.UKM - V3.PKM) RECORRIDO,
-> (V3.UKM - V3.PKM) / V2.LITROS CONSUMO
-> FROM vales V2 INNER JOIN
-> (SELECT
-> (SELECT MIN(KM) FROM vales WHERE KM > V1.KM) UKM, V1.KM PKM
-> FROM vales V1
-> ) V3 ON V3.UKM = V2.KM
-> ORDER BY 1 DESC;
+--------+--------+--------+-----------+-------------------+
| UKM | PKM | LITROS | RECORRIDO | CONSUMO |
+--------+--------+--------+-----------+-------------------+
| 262522 | 262245 | 37.575 | 277 | 7.371922821024617 |
| 262245 | 261911 | 35.388 | 334 | 9.438227647790212 |
| 261911 | 261504 | 43.668 | 407 | 9.320326096913071 |
| 261504 | 261253 | 33.349 | 251 | 7.526462562595581 |
+--------+--------+--------+-----------+-------------------+
4 ROWS IN SET (0.06 sec)
Creo que la consulta puede mejorarse retomando la lógica de gnzsoloyo, pero mientras investigo un poco y obtengo alguna otra propuesta con esto alcanza.
Saludos
Leo.