PDA

Ver la Versión Completa : Consulta SQL


PacoPepe
14-10-2008, 13:41:36
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 [-] (http://www.clubdelphi.com/foros/#)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 [-] (http://www.clubdelphi.com/foros/#)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
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í



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