Access - Seleccionar primer registro

 
Vista:
Imágen de perfil de Juan Carlos C

Seleccionar primer registro

Publicado por Juan Carlos C (17 intervenciones) el 25/06/2015 19:56:28
Hola todos,

Tengo una tabla con los siguientes campos (si ven la necesidad de agregar otros campos... acepto la sugerencia)

id_producto
cantidad
fecha

En esta tabla se graban los registros por fecha de las cantidades que se mueven de cada producto de tal manera que un producto puede tener muchos movimiento en diferentes fechas.

La consulta que necesito debe seleccionar el primer registro de cada producto y mostrar la cantidad que se movió en esa fecha. Solo un registro por cada producto el de la fecha mas antigua

Por su ayuda, 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

Seleccionar primer registro

Publicado por Enrique Heliodoro (1664 intervenciones) el 26/06/2015 09:26:28
Yo lo plantearía en dos pasos, en uno seleccionaría (con una consulta de datos agrupados) el menor de cada uno de los elementos (agruparía por id_producto y en 'fecha' condicionaría el menor), obteniendo un único binomio (id_producto, fecha) que definiría a cada elemento del conjunto.

Una nueva consulta que tendría a la misma tabla anterior y la consulta recién creada, relacionadas por los campos id_producto y fecha devolvería los datos que se deseasen

Podría ser algo como esto (la vista SQL de la consulta de agrupacion)

SELECT id_producto, Min(Fecha) AS Primera FROM Tabla1 GROUP BY id_producto;

La consulta final en su 'vista SQL' (utiliza la consulta anterior a la que llamare 'Unicos'):

SELECT Id_producto, Cantidad, fecha FROM Tabla1 INNER JOIN Unicos ON (Tabla1.Fecha = Unicos.primera) AND (Tabla1.id_producto = unicos.Id_producto);

Con una única SQL:
SELECT id_producto, Cantidad, Fecha FROM Tabla1 INNER JOIN (SELECT Id_producto, Min(Fecha) AS Primera FROM Tabla1 GROUP BY Id_producto) As ZZ ON (Tabla1.Fecha = zz.primera) AND (Tabla1.id_producto = zz.id_producto);

Se apreciara que se integra la consulta inicial (Unicos) dentro de la otra asignándole un alias (ZZ) y que ateniéndose a la regla de que 'primero se ejecutan los contenidos enmarcados por los parentesis' se creara en memoria y se utilizara en tiempo y forma correcto.

Nota: he intentado no cometer errores de sintaxis, los datos de origen utilizados no son los os del autor del hilo y han sido renombrados los objetos sobre la marcha para facilitar al usuario la adaptación.
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 Neckkito
Val: 529
Plata
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Seleccionar primer registro

Publicado por Neckkito (1157 intervenciones) el 26/06/2015 10:05:45
Hola Enrique:

Disculpa mi respuesta. Se ve que los dos estábamos contestando al mismo tiempo y no había podido ver que ya habías respondido.

A eso se le llama "compenetración"

Un saludo

Neckkito
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

Seleccionar primer registro

Publicado por Enrique Heliodoro (1664 intervenciones) el 26/06/2015 18:12:46
Toda respuesta es una posible solución, será el que las reciba el que adopte aquella que se le adapte mejor a su entorno, por el resto: créeme que no me siento 'pisado' y por adelantado mis disculpas si sin querer piso a alguien.
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 Neckkito
Val: 529
Plata
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Seleccionar primer registro

Publicado por Neckkito (1157 intervenciones) el 26/06/2015 10:04:06
Hola!

Créate una consulta en blanco y ponla en vista SQL. Escríbele la siguiente SQL:

SELECT nombreTabla.Id_producto, nombreTabla.Cantidad, nombreTabla.Fecha
FROM nombreTabla RIGHT JOIN (SELECT nombreTabla.Id_producto, First(nombreTabla.Fecha) AS PrimeroDeFecha
FROM nombreTabla
GROUP BY nombreTabla.Id_producto) as CTemp ON (nombreTabla.Id_producto = CTemp.Id_producto) AND (nombreTabla.Fecha = CTemp.PrimeroDeFecha);

donde debes cambiar nombreTabla por el nombre de tu tabla.

A ver si funciona como pides.

Un saludo,
firmaMail
http://neckkito.siliconproject.com.ar/
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 Juan Carlos

Seleccionar primer registro

Publicado por Juan Carlos (17 intervenciones) el 26/06/2015 17:41:06
Gracias a los dos por la ayuda, me sirvió bastante
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