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.

Preguntas similare

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:

Mostrar la cita
#2 JUDAJIME
13/06/2006 - 15:35 | Informe spam
Yo te diría que mires la siguiente forma

SELECT producto, MIN(fecha), min(precio)
FROM tabla
GROUP BY producto

Con este query, se debe de tener en cuenta, si para un producto en la misma
fecha existan dos valores, este query traería el mínimo valo de esta situación






Saludos,
JUDAJIME


"Julian" wrote:

Mostrar la cita
#3 BitOne®
13/06/2006 - 21:02 | Informe spam
Tomar en cuenta el Primary Key.


/*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
*/
set nocount on --apagamos el conteo

if object_id('tempdb..#producto','U') is not null --borramo temporal si
existe
drop table #producto


create table #producto ( --creamos temporal para prueba
producto integer,
almacen char(2),
fecha datetime,
precio float
)


insert into #producto values ( 1, '01', '2006-01-01', 1000)
insert into #producto values ( 1, '02', '2006-02-01', 2000)
insert into #producto values ( 2, '01', '2006-02-01', 1500)
insert into #producto values ( 3, '01', '2006-05-01', 5000)
insert into #producto values ( 3, '02', '2006-06-01', 5500)
insert into #producto values ( 3, '03', '2006-06-10', 6500)
set nocount off

select distinct a.*
from #producto a inner join (select producto,
min(fecha) fecha
from #producto
group by producto) b
on a.producto = b.producto
and a.fecha = b.fecha

Saludos,

-
BitOne®

www.yocsql.com

-


"JUDAJIME" <JUDAJIME@@discussions.microsoft.com> wrote in message
news:
Mostrar la cita
misma
Mostrar la cita
situación
Mostrar la cita
select
Mostrar la cita
usado
Mostrar la cita
ustedes
Mostrar la cita
precio?
Mostrar la cita
obtener
Mostrar la cita
Ads by Google
Search Busqueda sugerida