Coger registro anterior al calculado entre dos fechas.

En una consulta tengo los campos matricula, kms. Combustible, coste, fechacombustible:

Matricula Kms Gasoil Coste Fecha

0111-AAA    12000        5             5.5         01/01/2016

0111-AAA    12300        17         18.7        21/01/2016

0111-AAA    13000        40         44.3        21/02/2016

Creo otra consulta que con el parámetro entre fechas, me va a dar el resultado de kms recorridos, Sumaconsumo y Sumacoste. El problema es por ejemplo que si cojo entre 21/01/2016 y la ultima fecha me da que ha recorrido 700km, ha gastado 57 litros y con un coste de 63€ y lo que necesito es que recoja el registro anterior de km. Por lo que sería: 1000km - 57 Litros - 63€, con estas ultimas cantidades si puedo sacar una media de consumo real.

3 Respuestas

Respuesta
1

Una buena solución a lo que pides es usar una función personal en la SQL de selección de datos, que te permita tener en la consulta objetivo los datos que necesitas en el mismo registro.

Algo parecido a:

Funciones personales en SQL

¡Gracias! por tu pronta respuesta, al final he cogido la respuesta de sveinbjorn El Rojo. dado que soy bastante novato me ha resultado más fácil aplicar su ejemplo aunque modificando ciertas cosas para obtener los resultados que buscaba. Lo dicho, muy agradecido por vuestra ayuda.

Respuesta
2

¿Para qué haces una consulta?. Supongamos que tienes una tabla Coches con los campos Id, Matricula, kms, gasoil, coste y fecha. Añádele un campo DifK para que te registre la diferencia de kilómetros.

Con esa tabla haz un formulario tabular como en la imagen(por ejemplo)

Así, puedes poner las matrículas que quieras, los cálculos los hace sobre la matrícula.

En el evento Después de actualizar del cuadro de texto Kms crea un procedimiento de evento y escribe

If Nz(DLast("kms", "coches", "matricula='" & Me.Matricula & "'")) = 0 Then
DifK = 0
Else
DifK = Kms - Nz(DLast("kms", "coches", "matricula= '" & Me.Matricula & "'"))
End If
DoCmd. RunCommand acCmdSaveRecord

Si intercalas matrículas como en la imagen la dif de kms te la hace sobre el último registro de esa matrícula. Y con eso ya puedes hacer, en el pie del formulario los cálculos de consumo gasto, etc que quieras

Bien por matrícula, bien entre fechas y matricula o entre fechas

Respuesta
1

A ver si esta otra respuesta te sirve, o al menos te da la idea de por dónde tirar: Obtener los valores de fecha más altos de cada matrícula diferente

Un saludo.


Muchas gracias por tu pronta respuesta, el ejemplo que me has dado me ha servido perfectamente, solo ha habido que hacerle algunas modificaciones. Las dejo aquí por si le sirven a alguien. Los datos que me pueden pedir por ejemplo son:

El vehículo con matrícula 1111-AAA, ¿cuantos kilómetros ha recorrido?, ¿cuanto combustible ha gastado en esos kms? y ¿qué coste ha tenido? además todo esto hay que hacerlo entre fechas:  aa/dd/mm/aaaa  y  dd/mm/aaaa. Hay que tener en cuenta que estos vehículos no están sujetos a ningún control fijo tiempo, cantidad de combustible o kms. o sea repostan aleatoriamente, por lo que no se sabe cuantos días tardan en repostar, la cantidad de litros que les van a echar o los kilómetros que van a recorrer.

He creado una consulta de Totales con la tabla Combustible, he metido los campos Matricula (agrupándolas), Km(Máx) para cogen el ultimo marcaje, otra vez Km(Mín) para coger el primer marcaje, he creado un campo nuevo Difern: [MáxDeKm]-[MínDeKm] (esto es una expresión) para ver los kilometros recorridos, Litros(Suma) suma el total de litros, otra vez Litros(Último) recoge el ultimo combustible echado, campo nuevo LITROS PERIODO: [SumaDeLitros]-[ÚltimoDeLitros] (esto es una expresión) y le resta a la suma total de combustible el ultimo repostaje (esto es fundamental porque esos últimos litros aun no se han gastado), Coste(Suma) suma el total de gastos, Otra vez Coste(Último) marca el ultimo coste,  campo nuevo COSTE GRAL: [SumaDeCoste]-[ÚltimoDeCoste], (esto es una expresión) al igual que con el combustible, le quitamos al total del coste el ultimo coste repostaje y por último FechaCombustible(Dónde), en criterios ponemos  Entre [FECHA INICIAL] Y [FECHA FINAL].

Ya solo me falta controlar con siInm, el primer repostaje que me va a dar cero y ya esta completo. PERDONAD los técnicos por esta explicación tan básica, pero pensando que hay gente tan principiante como yo quizás les venga bien. De nuevo repetir mi agradecimiento a todos los que me han ayudado.

Seguro que a otros usuarios le sirve. ;-)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas