Ya la he adaptado a mis base de datos, voy a preparar algún que otro informe, completar la ayuda con las nuevas funciones, etc.... en cuanto la tenga lista, actualizo la versión anterior de Mantenimiento de Vehículo que tengo en proyectos completos para que la podáis ver.
Una cosa... y volviendo al mensaje anterior... si alguien conoce una fórmula más elegante para que aparezcan los registros iniciales en la consulta para mostrar kilometros realizados y Recorridos, me lo comenta, por que al final, tras haber sido adaptada a mi base de datos, la consulta (que funciona perfectamente), queda como el siguiente tocho
:
Código: Seleccionar todo
SELECT
"V"."marca" || ' ' || "V"."modelo" || ' - ' || "V"."matricula" AS "Vehiculo",
"FINAL"."idVehiculo",
"FINAL"."Fecha",
"FINAL"."Kilometros",
"FINAL"."Litros",
"FINAL"."Costo",
"FINAL"."Precio",
"FINAL"."Recorrido",
"FINAL"."Llenado",
"FINAL"."Lleno Anterior",
"FINAL"."Consumo"
FROM
(
SELECT
"F"."idVehiculo",
"F"."fecha" AS "Fecha",
"F"."kms" AS "Kilometros",
"F"."litros" AS "Litros",
"F"."costo" AS "Costo",
"F"."costo"/"F"."litros"+' €/l' as "Precio",
CAST (null as integer) AS "Recorrido",
"F"."lleno" AS "Llenado",
false AS "Lleno Anterior",
'' AS "Consumo"
FROM
"Repostajes" AS "F"
INNER JOIN
(
SELECT
"T"."idVehiculo",
MIN("T"."fecha") as "MINFECHA"
FROM "Repostajes" as "T"
GROUP BY "T"."idVehiculo") as "F2"
ON "F"."idVehiculo"="F2"."idVehiculo" AND "F"."fecha"="F2"."MINFECHA"
UNION
SELECT
"A"."idVehiculo",
"A"."Fecha1" AS "Fecha",
"A"."Kilometros",
"A"."Litros",
"A"."Costo",
"A"."Costo"/"A"."Litros"+' €/l' as "Precio",
"A"."Recorrido",
"A"."Llenado",
"A"."Lleno Anterior",
CASEWHEN ("A"."Llenado" AND "A"."Lleno Anterior" AND "A"."Litros">0,100*"A"."Litros"/"A"."Recorrido"+' l/100km',null) AS "Consumo"
FROM
(
SELECT
"R"."idVehiculo",
"R"."fecha" AS "Fecha1",
"R"."kms" AS "Kilometros",
"R"."litros" AS "Litros",
"R"."costo" AS "Costo",
"R"."lleno" AS "Llenado",
"R"."kms" - "R2"."kms" AS "Recorrido",
"R2"."lleno" AS "Lleno Anterior",
DATEDIFF('dd', "R2"."fecha","R"."fecha") AS "Dif"
FROM
"Repostajes" AS "R" LEFT JOIN "Repostajes" AS "R2" ON "R"."fecha" > "R2"."fecha" AND "R"."idVehiculo"="R2"."idVehiculo"
) AS "A"
INNER JOIN
(
SELECT
"R"."idVehiculo",
"R"."fecha" ,
min(DATEDIFF('dd', "R2"."fecha","R"."fecha")) AS "MinDif"
FROM
"Repostajes" AS "R" LEFT JOIN "Repostajes" AS "R2" ON "R"."fecha" > "R2"."fecha" AND "R"."idVehiculo"="R2"."idVehiculo"
GROUP BY "R"."idVehiculo","R"."fecha"
) AS "B"
ON "A"."Fecha1" = "B"."fecha" AND "A"."idVehiculo"="B"."idVehiculo"
WHERE "A"."Dif" = "B"."MinDif"
) AS "FINAL"
LEFT JOIN "vehiculos" AS "V" ON "FINAL"."idVehiculo" = "V"."id"
WHERE "V"."deBaja" = FALSE
ORDER BY "FINAL"."idVehiculo" ASC,"FINAL"."Fecha" ASC
Un Saludo