Consulta SQL

02/09/2004 - 17:06 por Camilo Acosta | Informe spam
Hola a todos.

Tengo la siguiente tabla con sus datos:

create table Tabla1(
fecha smalldatetime,
idcompra int,
cod int,
valor money
)

INSERT INTO dbo.Tabla1
(fecha, idcompra, cod, valor)
VALUES ('2004-08-10 00:00:00.000', 4, 10, 1000)
INSERT INTO dbo.Tabla1
(fecha, idcompra, cod, valor)
VALUES ('2004-08-10 00:00:00.000', 3, 10, 2000)
INSERT INTO dbo.Tabla1
(fecha, idcompra, cod, valor)
VALUES ('2004-08-01 00:00:00.000', 5, 10, 4000)
INSERT INTO dbo.Tabla1
(fecha, idcompra, cod, valor)
VALUES ('2004-08-09 00:00:00.000', 7, 11, 1432)

fecha idcompra cod valor
10/08/2004 4 10 1000
10/08/2004 3 10 2000
01/08/2004 5 10 4000
09/08/2004 7 11 1432

Quiero obtener la maxima fecha de la maxima crompra por cada codigo y que
traiga el valor respectivo.

Es decir:

fecha idcompra cod valor
10/08/2004 4 10 1000
09/08/2004 7 11 1432

Si se dan cuenta la idcompra 5 es la maxima pero no se encuentra en la fecha
mayor que es 10/08/204.

Se como hacerlo con tablas temporales, pero quiero saber si alguien se le
ocurre como hacerlo directamente utilizando subconsultas o algo así.

Saludos,

Camilo Acosta
 

Leer las respuestas

#1 Javier Loria
02/09/2004 - 18:57 | Informe spam
Hola Camilo:
Gracias por el DDL, hace mucho mas claro el problema. Unicamente falto
la llave Primaria de la Tabla, voy a asumir que es IDCompra ya que por los
datos eso parece.
Si es asi podemos construir por partes la consulta:
=SELECT Cod, MAX(Fecha) AS MaxFecha
FROM Tabla1
GROUP BY Cod
= Esta consulta me daria la Fecha de la UltimaCompra, pero se desprende de
los datos que es posible que existan 2 compras en la misma fechas y que en
tu caso quieres la compra que tenga el ID Mayor (4). Esto lo puedes lograr
con:
=SELECT MAX(IdCompra) MaxID
FROM Tabla1
JOIN (SELECT Cod, MAX(Fecha) AS MaxFecha
FROM Tabla1
GROUP BY Cod) AS Fechas
ON Tabla1.Cod=Fechas.Cod
AND Tabla1.Fecha=Fechas.MaxFecha
GROUP BY Tabla1.Cod
= Basado en esta consulta es posible, obtener los datos que deseas de la
tabla haciendo un JOIN con la tabla original:
=SELECT fecha
, idcompra
, cod
, valor
FROM Tabla1
JOIN (SELECT MAX(IdCompra) AS MaxID
FROM Tabla1
JOIN (SELECT Cod, MAX(Fecha) AS MaxFecha
FROM Tabla1
GROUP BY Cod) AS Fechas
ON Tabla1.Cod=Fechas.Cod
AND Tabla1.Fecha=Fechas.MaxFecha
GROUP BY Tabla1.Cod) AS UltimasCompras
ON IdCompra=MaxID
No estoy seguro del rendimiento de la consulta, si tienes algun
resultado con un conjunto grade de datos me gustaria conocerlo, sobretodo
comparado con la tabla tempora.
Espero te sirva,

Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda


"Camilo Acosta" wrote in message
news:#1#
Hola a todos.

Tengo la siguiente tabla con sus datos:

create table Tabla1(
fecha smalldatetime,
idcompra int,
cod int,
valor money
)

INSERT INTO dbo.Tabla1
(fecha, idcompra, cod, valor)
VALUES ('2004-08-10 00:00:00.000', 4, 10, 1000)
INSERT INTO dbo.Tabla1
(fecha, idcompra, cod, valor)
VALUES ('2004-08-10 00:00:00.000', 3, 10, 2000)
INSERT INTO dbo.Tabla1
(fecha, idcompra, cod, valor)
VALUES ('2004-08-01 00:00:00.000', 5, 10, 4000)
INSERT INTO dbo.Tabla1
(fecha, idcompra, cod, valor)
VALUES ('2004-08-09 00:00:00.000', 7, 11, 1432)

fecha idcompra cod valor
10/08/2004 4 10 1000
10/08/2004 3 10 2000
01/08/2004 5 10 4000
09/08/2004 7 11 1432

Quiero obtener la maxima fecha de la maxima crompra por cada codigo y que
traiga el valor respectivo.

Es decir:

fecha idcompra cod valor
10/08/2004 4 10 1000
09/08/2004 7 11 1432

Si se dan cuenta la idcompra 5 es la maxima pero no se encuentra en la


fecha
mayor que es 10/08/204.

Se como hacerlo con tablas temporales, pero quiero saber si alguien se le
ocurre como hacerlo directamente utilizando subconsultas o algo así.

Saludos,

Camilo Acosta



Preguntas similares