Imprimir página | Cerrar ventana

Ayuda sobre sql

Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y VBA
Descripción del foro: Foro de programacion en Access (Con código y sin código)
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=85134
Fecha de impresión: 26/Marzo/2026 a las 15:42


Tema: Ayuda sobre sql
Publicado por: 01loko
Asunto: Ayuda sobre sql
Fecha de publicación: 08/Abril/2020 a las 11:55
Tengo una tabla que archiva las variaciones de precios, con los campos (entre otros):
Referencia, fecha, año, valor_ant, proveedor

Me gustaria (si se puede) agruparlos de la siguiente manera:

referencia-fecha_mas_alta,año, valor_ant, proveedor

de tal manera que aun habiendo mas de 1 variacion a lo largo del año nos muestre:

12345b,01/12/19,2019,1500, pepito perez
12345b,20/10/18,2018,1420, pepito perez
12345b,20/08/17,2017,1450, pepito perez
12345b,02/12/16,2016,1150, pepito perez
12345b,21/07/17,2015,1050, pepito perez




-------------
Recordar de que soy nuevo y estoy aprendiendo.



Respuestas:
Publicado por: xavi
Fecha de publicación: 08/Abril/2020 a las 12:36
Voy a suponer que hay un error de transcripción y que el ultimo registro, en lugar de 21/07/17 es 21/07/15

También entiendo que existen más registros dentro del año.

Imaginando una tabla llamada Variaciones, se trataría de una primera consulta sobre la tabla agrupando por referencia, año y proveedor tomando el Maximo de fecha. Llamamos a la consulta Agrupado
A continuación otra consulta basada en la propia tabla y la consulta Agrupado relacionando los campos referencia, fecha, año y proveedor. En los campos mostramos todos los campos y el Valor de la tabla.

Por separado:
Consulta Agrupado
(SELECT [Variaciones].Referencia, Max([Variaciones].Fecha) AS MáxDeFecha, [Variaciones].Año, [Variaciones].Proveedor FROM Variaciones GROUP BY [Variaciones].Referencia, [Variaciones].Año, [Variaciones].Proveedor

Consulta resultado (apoyado en consulta Agrupado existente)
SELECT Variaciones.Referencia, Variaciones.Fecha, Variaciones.Año, Variaciones.Valor_Ant, Variaciones.Proveedor
FROM Variaciones INNER JOIN Agrupado ON (Variaciones.Proveedor = Agrupado.Proveedor) AND (Variaciones.Año = Agrupado.Año) AND (Variaciones.Fecha = Agrupado.MáxDeFecha) AND (Variaciones.Referencia = Agrupado.Referencia);


Todo junto (no existe la consulta Agrupado):
SELECT [Variaciones].Referencia, [Variaciones].Fecha, [Variaciones].Año, [Variaciones].Valor_Ant, [Variaciones].Proveedor
FROM Variaciones INNER JOIN (SELECT [Variaciones].Referencia, Max([Variaciones].Fecha) AS MáxDeFecha, [Variaciones].Año, [Variaciones].Proveedor FROM Variaciones GROUP BY [Variaciones].Referencia, [Variaciones].Año, [Variaciones].Proveedor)  AS Agrupado ON ([Variaciones].Referencia=Agrupado.Referencia) AND ([Variaciones].Fecha=Agrupado.MáxDeFecha) AND ([Variaciones].Proveedor=Agrupado.Proveedor) AND ([Variaciones].Año=Agrupado.Año);

Como podrás ver, esta segunda SQL simplemente cambia 
...INNER JOIN Agrupado ON ...
por:
... INNER JOIN (la_SQL_completa) AS Agrupado ON

Un saludo



-------------
Xavi, un minyó de Terrassa

http://www.llodax.com" rel="nofollow - Mi web


Publicado por: 01loko
Fecha de publicación: 10/Abril/2020 a las 08:59
xavi, si has escrito eso de carrerilla, tienes que hacertelo mirar.
Por Dios que funciona.
Aunque tuve que ajustarlo, por el nombre de los campos, pero funciona y hace lo esperado
Mil gracias

Podemos cerrar el hilo


-------------
Recordar de que soy nuevo y estoy aprendiendo.



Imprimir página | Cerrar ventana