** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Posible error consulta totales con Ultimo
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoPosible error consulta totales con Ultimo

 Responder Responder
Autor
Mensaje
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 1999
Enlace directo a este mensaje Tema: Posible error consulta totales con Ultimo
    Enviado: 04/Abril/2019 a las 09:39
Buenas!

Lo primero y segun leo, en una consulta de totales si selecionas ultimo debe de mostrar el ultimo registro indroducido en ese campo no, es correcto esto??

Tengo una tabla donde se guardan los kilometros de vehiculos cuando se repostan.

En una consulta de totales utilizo el campo matricula AGRUPADO , campo kilometros con MAX y campo kilometros con ULTIMO.

En este caso el MAX y ULTIMO deberian tenere el mismo valor(los kiometros estan bien indroducidos).
Pero no ocurre asi, MAX si que lo da correctamente, pero ULTIMO no, no da el ultimo registro del campo kilometros de la matricula X.

He hecho una prueba con la tabla repostajes poniendo un solo campo en la consulta con ULTIMO y no me da el ultimo registro indroducido en la tabla repostajes.

Que puede estar pasando, estoy un poco descolocado??

O algo funciona mal o ULTIMO no hace lo que yo pieso que deberia de hacer y soy yo el que esta equivocado.....



Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 1999
Enlace directo a este mensaje Enviado: 04/Abril/2019 a las 10:10
Para hacer una prueba en casa, acabo de crear una base de datos con una tabla repostajes indroduciendo unas matriculas y kilometros.

He metido registros con diferentes kilometros para una misma matricula y si me da los datos correctamente. El MAX me da el kilometraje mas alto para esa matricula y el ULTIMO me da el ultimo registro del campo kilometros para esa matricula.

Ahora si que estoy mas descolocado aun.

Access como guarda internamente para el orden de los registros???

Los datos estan en red con 12 front end y el back end con las tablas, por si os vale para algo....
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: en línea
Puntos: 10937
Enlace directo a este mensaje Enviado: 04/Abril/2019 a las 10:53
¿Tienes los mismos índices en las dos tablas?

Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
pitxiku Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 996
Enlace directo a este mensaje Enviado: 04/Abril/2019 a las 11:11
First y Last no devuelven siempre lo que queremos, necesitas que la ordenacion del conjunto de registros sobre el que trabajes sea fijo:

-https://support.office.com/es-es/article/funciones-first-y-last-acd76019-c37f-432d-9807-4fc63cac1db5

- http://sqlraipon.blogspot.com/2009/02/first-y-last.html?m=1
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 1999
Enlace directo a este mensaje Enviado: 04/Abril/2019 a las 11:40
Os cuento lo que he hecho.

He creado una tabla nueva tbRepostajes con los mismos campos, he copiado(copia y pega, no exportado) los datos a la tabla nueva y la consulta me arroja los datos bien.

Wacko Podria ser que la tabla este corrupta??

Si paso la misma consulta a la tabla nueva los datos son correctos, si le paso la tabla vieja incorrectos.

En este caso en la vieja el id es autonumerico y en la nueva numero ya que si no no me dejaba copiar los datos. Si exportaba los datos en vez de copiar con una consulta el error seguia apareciendo, esto podria ser por que el indice interno de accesa no lo esta haciendo bien, de hay que pregunte as arriba por posible corrucion???

Publicado originalmente por pitxiku pitxiku escribió:

First y Last no devuelven siempre lo que queremos, necesitas que la ordenacion del conjunto de registros sobre el que trabajes sea fijo:


Esro lo tengo que mirar despacio, pero no se si tiene que ver
la consulta es esta.

SELECT tbRepostajes.Matricula, Max(tbRepostajes.Kilometros) AS MáxDeKilometros, Last(tbRepostajes.Kilometros) AS ÚltimoDeKilometros
FROM tbRepostajes
GROUP BY tbRepostajes.Matricula
ORDER BY tbRepostajes.Matricula;




Editado por rokoko - 04/Abril/2019 a las 11:43
Arriba
pitxiku Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 996
Enlace directo a este mensaje Enviado: 04/Abril/2019 a las 11:54
Compacta y repara la base de datos, y vuelve a probar con la tabla que te da bien los datos en la consulta.

Y para la consulta, prueba a usar una subconsulta con un TOP 100 PERCENT, como indica Raipon.
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 1999
Enlace directo a este mensaje Enviado: 04/Abril/2019 a las 12:15
Publicado originalmente por pitxiku pitxiku escribió:

Compacta y repara la base de datos, y vuelve a probar con la tabla que te da bien los datos en la consulta.

Y para la consulta, prueba a usar una subconsulta con un TOP 100 PERCENT, como indica Raipon.


Parece que algo he logrado.

1-Creo la tabla nueva exactamente igual, incluidos  id con autonumericos
2-Compacto y reparo
3-Anexo datos de la tabla vieja con consulta( me respata los id de autonumericos ademas)
4-Ejecuto consulta y datos correctos!!

Mañana en el curro lo hago en la que esta funcionando y os cuento.

Y lo de Raipon lo miro despacio a ver si me aclaro, que estoy espeso ahora de tanto probar cosas y verificar datos.

Saludos
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 1999
Enlace directo a este mensaje Enviado: 04/Abril/2019 a las 17:10
Publicado originalmente por pitxiku pitxiku escribió:

First y Last no devuelven siempre lo que queremos, necesitas que la ordenacion del conjunto de registros sobre el que trabajes sea fijo:
Me a costado ver un poco lo que buscaba Raipon, que saliese el primero y el ultimo ordenado alfabeticamente, en este caso no respeta el orden de insercion de los registros.

En mi caso si que quiero que los respete, no veo donde me ayuda el poner la subconsulta TOP 100 PERCENT??

Aqui me he perdido...
Arriba
pitxiku Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 996
Enlace directo a este mensaje Enviado: 04/Abril/2019 a las 19:08
Lo que viene a decir es 2 cosas:

1. Primero y último van a devolver datos incoherentes a no ser que los registros estén ordenados como deseemos.

2. Que cuando usamos subconsultas, el orden que hemos establecido en la primera consulta no va a ser respetado en la siguiente consulta, por motivos de rendimiento. A no ser que usemos un SELECT TOP. En este caso, obligamos a Access a devolver los registros en el orden que le hemos indicado.

Dicho esto, para encontrar el primer o último registro de una tabla o consulta, yo prefiero una subconsulta o función que use una sentencia del tipo SELECT TOP 1 ... ORDER BY ... Pero si te funciona bien en tu escenario, no hay porque cambiar nada.

Editado por pitxiku - 04/Abril/2019 a las 19:09
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 1999
Enlace directo a este mensaje Enviado: 05/Abril/2019 a las 17:46
Pues falla otra vez, a la mañana cuando he creado la tabla nueva funcionaba bien, pero al meter unos registros vuelve a fallar.
HE hecho un compactar y reparar y a funcionado. Es como si los indices internos de access no funcionasen bien en esa tabla.

Estoy probando a ver el metodo de Happy pero no logro montar la consulta bien

Tabla:   se llama tbRepostajes
Los campos necesito:  Ultimo de id,  Matricula, Max de Kilometros, Ultimo de kilometros

Agrupado y ordenado por matricula.

De momento he montado esto pero me da error. He intentado varias cosas pero nada...

SELECT Last(id) AS ÚltimoId, Matricula AS DatosMatricula, Max(Kilometros) AS MaximoKilometraje, Last(Kilometros) AS ÚltimoRepostaje
FROM
(
Select Top 100 Percent Kilometros, id, Matricula
From tbRepostajes
ORDER BY Matricula
);


Arriba
pitxiku Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 996
Enlace directo a este mensaje Enviado: 05/Abril/2019 a las 19:20
Sin saber qué error da, sólo podemos especular:

En la consulta de totales no haces nada con la Matricula, así que Access se quejará si no indicas que quieres agrupar por ella.

Otra cosa: entiendo que ese Id es el campo autonumérico, con lo que el último kilómetro coincidirá con el último Id. Si es así, tal vez te convenga más ordenar la subconsulta por el ID, y la consulta de totales por la Matrícula:

SELECT Last(id) AS ÚltimoId, Matricula AS DatosMatricula, Max(Kilometros) AS MaximoKilometraje, Last(Kilometros) AS ÚltimoRepostaje
FROM
(
Select Top 100 Percent Kilometros, id, Matricula
From tbRepostajes
ORDER BY id
)
GROUP BY Matricula
ORDER BY Matricula;



Editado por pitxiku - 05/Abril/2019 a las 19:21
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 1999
Enlace directo a este mensaje Enviado: 05/Abril/2019 a las 19:31
Publicado originalmente por pitxiku pitxiku escribió:

Sin saber qué error da, sólo podemos especular:

En la consulta de totales no haces nada con la Matricula, así que Access se quejará si no indicas que quieres agrupar por ella.


ok gracias, en los proximos dias ire probando a ver si noto diferencias entre las 3 consultas, a ver si funciona la cosa ...
He montado otra consulta que me saca el MAX de id y la he utilizado como sub consulta en otra, de esta forma no le quedaria mas remedio que utilizar esos id maximos.....que al ser max son los ultimos para las matriculas

Mucha gracias y os cuento...
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 1999
Enlace directo a este mensaje Enviado: 06/Abril/2019 a las 00:25
Una duda, en una consulta de totales, Ultimo saca el ultimo registro. Imaginemos que su id es 10
Imaginemos que se insertan mas registro id 12, 12, 13, 14.....
Si luego editamos el registro con id 10 este pasa a ser el Ultimo en la consulta ??


Saludos
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 1999
Enlace directo a este mensaje Enviado: 08/Abril/2019 a las 11:53
Despues de indagar un rato por los registros ya se porque la consulta me arrojaba eso datos, no es que lo hiciese mal, sino que los repostajes no se registraban el dia que correspondia sino otro dia posterior, y si entre ese periodo repostaban y si lo registraban logicamente la consulta de totales con Ultimo sacaba el ultimo registro.Unhappy

He modificado la consulta y ahora entre otros datos tambien me arroja el ultimo repostaje con la fecha mas alta, si la fecha esta bien metida este sera el ultimo repostaje.

Se puede cerrar

Mucha gracias.

Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable