Select algo dificil

12/06/2006 - 18:22 por Julian | Informe spam
Hola a todos.
Disculpen en primer lugar si mi pregunta es algo sencilla pero es que de
verdad no he podido hacer lo que quiero.

Esta es la situación:
tengo una tabla en donde tengo los siguientes campos:
producto, almacen, fecha y precio.
En estas tablas pueden haber registros como los siguientes:

1 - 01 - 01/01/2006 - 1000
1 - 02 - 01/02/2006 - 2000
2 - 01 - 01/02/2006 - 1500
3 - 01 - 01/05/2006 - 5000
3 - 02 - 01/06/2006 - 5500
3 - 03 - 10/06/2006 - 6000

El orden de las columnas es producto, almacen, fecha y precio.
Lo que necesito hacer es obtener el precio que tiene cada producto de
acuerdo a su fecha más vieja, es decir, de acuerdo a lo que quiero el select
me debería devolver los siguientes registros:

1 - 01 - 01/01/2006 - 1000
2 - 01 - 01/02/2006 - 1500
3 - 01 - 01/05/2006 - 5000

Como ven ahí tendría el precio de cada producto para su fecha más vieja.
Esto es lo que no he podido hacer y creanme que he hecho de todo, he usado
subconsultas pero nada no he podido dar con la solución, espero que ustedes
me puedan ayudar.

Haciendo algo así obtendría la fecha más vieja pero y cómo obtengo su precio?
SELECT producto, MIN(fecha)
FROM tabla
GROUP BY producto

Estoy utilizando un GROUP BY por lo tanto no encuentro la manera de obtener
el precio para esa fecha.
Espero haberme explicado.

Saludos a todos y gracias por su tiempo.
 

Leer las respuestas

#1 Alejandro Mesa
12/06/2006 - 18:39 | Informe spam
Trata,

select *
from t1 as a
where not exists (
select *
from t1 as b
where b.producto = a.producto and b.fecha < a.fecha
)
go

Si existen dos filas con la misma fecha para un producto dado, entonces
tendras un empate. Quieres usar alguna otra columna para romper ese empate?

select *
from t1 as a
where not exists (
select *
from t1 as b
where
b.producto = a.producto
and
(
b.fecha < a.fecha
or
(b.fecha = a.fecha and b.almacen < a.almacen)
)
)
go


AMB

"Julian" wrote:

Hola a todos.
Disculpen en primer lugar si mi pregunta es algo sencilla pero es que de
verdad no he podido hacer lo que quiero.

Esta es la situación:
tengo una tabla en donde tengo los siguientes campos:
producto, almacen, fecha y precio.
En estas tablas pueden haber registros como los siguientes:

1 - 01 - 01/01/2006 - 1000
1 - 02 - 01/02/2006 - 2000
2 - 01 - 01/02/2006 - 1500
3 - 01 - 01/05/2006 - 5000
3 - 02 - 01/06/2006 - 5500
3 - 03 - 10/06/2006 - 6000

El orden de las columnas es producto, almacen, fecha y precio.
Lo que necesito hacer es obtener el precio que tiene cada producto de
acuerdo a su fecha más vieja, es decir, de acuerdo a lo que quiero el select
me debería devolver los siguientes registros:

1 - 01 - 01/01/2006 - 1000
2 - 01 - 01/02/2006 - 1500
3 - 01 - 01/05/2006 - 5000

Como ven ahí tendría el precio de cada producto para su fecha más vieja.
Esto es lo que no he podido hacer y creanme que he hecho de todo, he usado
subconsultas pero nada no he podido dar con la solución, espero que ustedes
me puedan ayudar.

Haciendo algo así obtendría la fecha más vieja pero y cómo obtengo su precio?
SELECT producto, MIN(fecha)
FROM tabla
GROUP BY producto

Estoy utilizando un GROUP BY por lo tanto no encuentro la manera de obtener
el precio para esa fecha.
Espero haberme explicado.

Saludos a todos y gracias por su tiempo.

Preguntas similares