Access - Consulta Top 1

 
Vista:

Consulta Top 1

Publicado por Rafi (71 intervenciones) el 11/01/2017 21:01:46
Hola, no manejo bien las consultas SQL y estoy probando para obtener de una tabla el último movimiento de un socio o más reciente. En la tabla lógicamente hay muchos socios y cada uno tiene un montón de movimientos ordenados bien por un campo FECHA, o un campo IdSocio o quizás podría valer también el campo maestro autonumérico Id, de la tabla ¿ el más alto ?. Podéis iniciarme en la sentencia SQL que debo emplear.
Lo que pretendo es obtener un listado de socios, ordenado a su vez por los que aportaron ingresos más recientemente en orden descendente, pero que sólo muestre ese registro de cada socio. 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
Imágen de perfil de Manuel
Val: 395
Bronce
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Consulta Top 1

Publicado por Manuel (171 intervenciones) el 12/01/2017 08:48:00
Deberías poner la estructura de la tabla concreta y tal, porque no especificas que se guarda de código de socio, etc... imaginemos que el código de socio es un auto numérico (cuanto más nuevo, más elevado es el número)... bien pues sería algo así:

1
SELECT TOP 1 CodCliente, otros campos FROM clientes ORDER BY CodCliente DESC;

Explicación:
ordenamos los clientes por el campo objetivo (que si es el último estará en último lugar en orden ascendente -es el que tiene el número más elevado-, y primero si es orden inversa, que es lo que usamos).

después con TOP 1 lo que le indicamos que coja solo una fila, concretamente la primera.

Lo mismo se podría hacer mirando fechas o lo que fuera, solo es cosa de ordenar según nos convenga, filtrar si se necesita (en este caso no se hace) y indicar que coja tantos registros como necesitamos, nada más (en este caso solo 1).

Ahora bien, tu último párrafo dice una cosa distinta, porque ahí dices un listado de socios, no un solo socio... y esa consulta es muy distinta, porque no conozco la estructura de tablas de tu base de datos, supongo que serán más de una tabla. Aunque sin lo anterior, lo que te digo en un ejercicio de imaginación, pues seguramente en ese caso lo que realmente buscas es algo más:

1
SELECT socio, MAX(precio) FROM socios GROUP BY socio ORDER BY MAX(precio) DESC;

una consulta así, suponiendo que sacas de una tabla en donde los socios tienen más de una entrada (tipo líneas de factura), concretamente una por cada pago... pues lo que hace es: Devolver en orden descendente por cantidad máxima pagada por cada socio un listado de socios con sus cantidades pagadas... y solo figura cada socio una vez.

hasta luego
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

Consulta Top 1

Publicado por Rafi (71 intervenciones) el 12/01/2017 19:59:42
Hola Manuel, y gracias por la ayuda. Bueno la estructura de la tabla "Movimientos" es la siguiente: [Id] Autonumérico clave principal; [IdSocio] Número entero con duplicados que toma el valor de otra tabla, el valor del campo IdSocio, como te digo lo relaciono mediante código vba, IdSocio = forms!Socios!NumSocio, donde NumSocio es el autonumerico clave principal de un formulario que muestra registros de otra tabla, no existen relaciones entre tablas más que esta coincidencia en ambos campos, coincidencia que hago mediante formulario subformulario, vinculando campos, el campo [Importe] tipo moneda y otros más que identifican al socio (nombre, apellidos, ect...)
He estado haciendo pruebas con los ejemplos que me has enviado, y creo que la segunda es la que se ciñe a mis pretensiones, pero después de adaptarla queda así:

SELECT Movimientos.IdSocio, Max(Movimientos.Id) AS [Ultimo Importe]
FROM Movimientos
GROUP BY Movimientos.IdSocio
ORDER BY Max(Movimientos.Id) DESC;

Me arroja lo que quiero, una lista de los registros más reciente de cada socio, mostrando solo uno por cada, pero al añadir el campo [Importe], que es lo que me interesa, ya muestra todos los registros de la tabla. Esto será lo que hago mal, lo añado en la primera linea antes del Máx. 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
Imágen de perfil de Manuel
Val: 395
Bronce
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Consulta Top 1

Publicado por Manuel (171 intervenciones) el 12/01/2017 22:03:58
Me alegro haberte sido útil, un placer. En cuanto al tema, pues con lo que dices, no solo te da lo que quieres, es que es lo necesitas por lo que pones. Eso sí, cuidado si tienes valores Null en el campo IdSocio (no creo, pero por si las moscas).
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