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:

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.

Respuesta Responder a este mensaje
#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:

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.

Respuesta Responder a este mensaje
#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:
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:

> 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.
>
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida