Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Consulta SQL (https://www.clubdelphi.com/foros/showthread.php?t=60784)

PacoPepe 14-10-2008 13:41:36

Consulta SQL
 
Necesito hacer la siguiente consulta en Firebird:

Tengo una tabla de Materias Primas (MATERIASPRIMASDET) que contiene el proveedor de la materia prima (campos IDPROVEEDOR, PROVEEDOR), el PRECIO de compra de esa materia prima y la FECHA con el precio de esa materia prima.

Si un proveedor cambia el precio de su materia prima, se añade una nueva fila con todos esos campos.
Una misma materia prima tiene varios proveedores

Necesito saber para una determinada materia prima, el último precio que me ha dado cada proveedor.

Código SQL [-]select distinct IDPROVEEDOR, max(fecha) AS FECHAMAX, PROVEEDOR from MATERIASPRIMASDET where IDMATERIAPRIMA = 61 group by idproveedor, PROVEEDOR


Con esta consulta de arriba (al que le falta el campo FECHA)
obtengo el resultado adecuado, pero al añadirle el campo fecha

Código SQL [-]select distinct IDPROVEEDOR, max(fecha) AS FECHAMAX, PROVEEDOR , FECHA from MATERIASPRIMASDET where IDMATERIAPRIMA = 61 group by idproveedor, PROVEEDOR



obtengo todas las líneas correspondientes a esa materia prima,
las últimas, las primeras y las del medio.

Alguien me podría ayudar.


Un saludo y muchas gracias

PacoPepe 14-10-2008 13:43:37

En la previsualizacion se veia correctamente, con las etiquetas SQL funcionando correctamente

poliburro 14-10-2008 14:57:41

Código SQL [-]
 
         Select Detalle.IDPROVEEDOR, Filtro.FechaMax, Detalle.Proveedor, Detalle.Fecha
           From MATERIASPRIMASDET  Detalle
    Inner Join (
                          Select IDPROVEEDOR, max(fecha) FechaMAx
                            From MATERIASPRIMASDET 
                          where IDMATERIAPRIMA = 61 
                      group by idproveedor
                    ) Filtro
              On Detalle.IDPROVEEDOR = Filtro.IDPROVEEDOR And
                    Detalle.Fecha = Filtro.FechaMAx

PacoPepe 14-10-2008 16:46:57

Ahora si, muchas gracias :)

Quedaría así

Código SQL [-]

Select D.IDPROVEEDOR, D.Proveedor, D.Fecha, D.precio
           From MATERIASPRIMASDET  D
    Inner Join (
                          Select IDPROVEEDOR, max(fecha) as FechaMAx
                            From MATERIASPRIMASDET 
                          where IDMATERIAPRIMA = 61 
                      group by idproveedor
                    ) F
              On D.IDPROVEEDOR = F.IDPROVEEDOR and
                    D.Fecha = F.FechaMAx


La franja horaria es GMT +2. Ahora son las 07:21:40.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi