Access - Resta entre el mismo campo del registro anterior

 
Vista:
sin imagen de perfil
Val: 77
Ha aumentado 1 puesto en Access (en relación al último mes)
Gráfica de Access

Resta entre el mismo campo del registro anterior

Publicado por Carlos (41 intervenciones) el 01/08/2018 16:48:34
Hola llevo unos días dándole vueltas como puedo hacerlo, he probado a intentar hacerlo con varias formulas que he visto en el foro, pero luego no se como aplicarlo
Quiero saber como restar el valor de 1 campo entre el valor del registro actual y el valor del registro anterior
Estructura
El campo se llama Ahorrado, os pongo un ejemplo de 3 registros y el id que llevaria
id 1 [Ahorrado] Registro 1 Resultado=x
900
id 2 [Ahorrado] Registro 2 Resultado=100
1000
id 3 [Ahorrado] Registro 3 Resultado=200
1200
Lo que quiero es conseguir sacar el valor resultado en la tabla
Indicaros que tengo la tabla con un campo autonumerico , no se si podriamos restar indicandole que el el id -1

Me podéis indicar entiendo que se podría conseguir con una consulta
Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 77
Ha aumentado 1 puesto en Access (en relación al último mes)
Gráfica de Access

Resta entre el mismo campo del registro anterior

Publicado por Carlos (41 intervenciones) el 01/08/2018 18:38:43
Antes pregunto antes doy con la respuesta

sacado de aquí:
https://www.lawebdelprogramador.com/foros/Access/1438590-Resta-entre-registros-de-un-mismo-campo.html


Pongamos que tienes una tabla T2 con los campos ID y KM

Si el ID es correlativo (1,2,3,4,...) y sin faltar ningún número, podrías calcular la diferencia con la siguiente formula en un campo calculado en una consulta:

Diferencia: Abs([KM]-((DSuma("KM";"T2";"id<=" & [id]-1))-Nz(DSuma("KM";"T2";"id<=" & [id]-2);0)))

He sustituido KM y T2 por los que yo tengo creo consulta y a la funcionado

Diferencia: Abs([Ahorrado]-((DSuma("Ahorrado";"Tabla1";"id<=" & [id]-1))-Nz(DSuma("Ahorrado";"Tabla1";"id<=" & [id]-2);0)))
Quedando asi:
Ingresos id Diferencia
3.200,00 € 1
3.600,00 € 2 400
3.100,00 € 3 500
3.500,00 € 4 400
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Resta entre el mismo campo del registro anterior

Publicado por Anonimo (2076 intervenciones) el 01/08/2018 19:42:05
En un conjunto de datos creciente, el anterior SIEMPRE será el mayor de los inferiores al dato referente ….. eso funcionara de forma independiente a que la lista este completa o tenga saltos aleatorios.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 77
Ha aumentado 1 puesto en Access (en relación al último mes)
Gráfica de Access

Resta entre el mismo campo del registro anterior

Publicado por Carlos (41 intervenciones) el 02/08/2018 15:40:21
Hola, tengo un problema, esta consulta no me funciona cuando la quiero utilizar en campos ya calculados
El campo Ahorrado esta calculado con una consulta y la suma de dos campo ¿por que motivo no me funciona?

Os adjunto un pequeño ejemplo
Nombre de la tabla "Tabla"
Nombre de la consulta "Consulta"
Estructura
Como podéis ver el campo "Diferencia ingresos mes anterior" me funciona bien la consulta y me resta el mismo campo del registro anterior
En cambio el campo "Diferencia saldo mes anterior" ni da error ni muestra nada, indicar que este campo se calcula con la resta de "ingresos"-"gastos", entiendo que al ser un campo calculado con una consulta por eso no me funciona esta formula
Diferencia saldo mes anterior: Abs([saldo]-((DSuma("saldo";"Tabla";"id<=" & [id]-1))-Nz(DSuma("saldo";"Tabla";"id<=" & [id]-2);0)))
Id ingresos gastos saldo Diferencia ingresos mes anterior Diferencia saldo mes anterior
2 1.200,00 € 1.000,00 € 200,00 €
3 1.300,00 € 900,00 € 400,00 € 100
4 1.500,00 € 800,00 € 700,00 € 200

El campo se me queda en blanco y debería mostrase si
Id ingresos gastos saldo Diferencia ingresos mes anterior Diferencia saldo mes anterior
2 1.200,00 € 1.000,00 € 200,00 €
3 1.300,00 € 900,00 € 400,00 € 100 200
4 1.500,00 € 800,00 € 700,00 € 200 300
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Resta entre el mismo campo del registro anterior

Publicado por Anonimo (2076 intervenciones) el 02/08/2018 19:05:05
Un campo calculado solo existe como un 'campo fantasma', pero si existe el (los) datos que han dado lugar a esa presentación (esto es: el calculo que ha dado lugar a ese 'fantasma')

Si en lugar de utilizar al 'fantasma' se utiliza su origen de datos, (dejando a un lado lo engorrosa que pueda ser la creación) creo que no habrá problemas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 77
Ha aumentado 1 puesto en Access (en relación al último mes)
Gráfica de Access

Resta entre el mismo campo del registro anterior

Publicado por Carlos (41 intervenciones) el 03/08/2018 08:26:50
Gracias Anónimo, ahora entiendo lo que me dices, voy a probar y os cuento.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 77
Ha aumentado 1 puesto en Access (en relación al último mes)
Gráfica de Access

Resta entre el mismo campo del registro anterior

Publicado por Carlos (41 intervenciones) el 04/08/2018 13:57:33
Pues tal como me comentaba Anonimo un campo de un registro anterior si se podía recuperar, pero la suma de dos campos, es decir un campo calculado no (al parecer este campo se le conoce como campo fantasma y al no estar en la tabla no pudo utilizarlo), tal y como mostré ayer.
Ayer trasteando finalmente di con la solución pero no acabo de comprender por que me funciona, ya que estoy recuperando el registro anterior de un campo calculado, cosa que no me funcionaba
Id ingresos gastos saldo Efectivo Banco Efectivo+banco Mes2-Mes1
2 1200 1000 200,00 € 10 500 510,00 €
3 1300 900 400,00 € 12 700 712,00 € 202
4 1500 800 700,00 € 15 750 765,00 € 53


La formula utilizada para recuperar el registro anterior es
Mes2-Mes1: Abs([Efectivo+Banco]-((DSuma("Efectivo+Banco";"Tabla";"id<=" & [id]-1))-Nz(DSuma("Efectivo+Banco";"Tabla";"id<=" & [id]-2);0)))
¿alguien me explica que hacia ayer mal? solo por curiosidad?

Ya tengo mi formulario acorde con lo que quería, solo me queda esta duda, espero encontrar explicacion
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Resta entre el mismo campo del registro anterior

Publicado por Anonimo (2076 intervenciones) el 04/08/2018 15:24:24
Funciona porque no se utiliza 'el campo anterior', sino que se utiliza una función de dominio que registro a registro (le importa poco que sea anterior o no) suma el conjunto de los registros que son iguales o anteriores a el (pero el resultado es …. un campo calculado al que si se le hace referencia …..)


Intentare dejarlo claro (porque Access trabaja de acuerdo a 'sus normas' y las ejecuta sin fijarse en quien las utiliza (no distingue a usuarios de tipo 'A' de usuarios de tipo 'B')

En un registro 'un calculo' nos devuelve una cifra (123456)
en el siguiente lo deseamos utilizar para el calculo continuo ….
anterior + (calculo-actual) = error

Si funcionaria:
((El calculo anterior) + (el calculo actual))


Otras forma funcional seria:
(haz el calculo con todos los que sean iguales o inferiores a mi)

Como se utilizan funciones de dominio, el gasto en recursos es grande y la presentación puede resentirse (sobre todo si se efectúan desplazamientos rápidos sobre el conjunto de datos)

En esta forma (que es funcional) se utiliza LA TABLA (no el calculo efectuado en el formulario) y será valida si la referencia a los datos es correcta, por ejemplo: tal como esta planteada NO PERMITE hacer un calculo entre periodos, se le indica que no sea mayor que el actual. pero no limita 'por debajo' y utilizara desde el primer registro.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 77
Ha aumentado 1 puesto en Access (en relación al último mes)
Gráfica de Access

Resta entre el mismo campo del registro anterior

Publicado por Carlos (41 intervenciones) el 04/08/2018 18:53:05
Gracias, como no me quedaba claro he retomado la base datos primera y el cambio ha sido este:

Cambio la formula de
Diferencia saldo mes anterior: Abs([saldo]-((DSuma("saldo";"Tabla";"id<=" & [id]-1))-Nz(DSuma("saldo";"Tabla";"id<=" & [id]-2);0)))
a
Diferencia saldo mes anterior: Abs([ingresos-gastos]-((DSuma("ingresos-gastos";"Tabla";"id<=" & [id]-1))-Nz(DSuma("ingresos-gastos";"Tabla";"id<=" & [id]-2);0)))
Creo otro campo en consulta con ingresos-gastos: [saldo]

En la primera intentaba calcularlo con un campo calculado (fantasma) y no funcionaba
En la segunda hago referencia a otro campo ( el calculado), que luego creo con el valor de saldo ( ingresos-gastos: [saldo]) y así si se lo traga, tu explicación no la terminaba de entender pero mas o menos comprendía lo que me indicabas, dejo el access modificado adjunto por si a alguien le sirviera, esto es un mundo :), gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar