obtener los resultados más recientes de cada cliente

26/05/2009 - 14:57 por DT | Informe spam
Hola a todos
Tengo una tabla con los siguientes datos:

CodCli Fecha_actualizacion Tipo
1 01/11/2009 A
1 01/01/2009 E
2 01/21/2009 A
2 01/31/2009 D
3 02/01/2009 A
3 03/01/2009 B
4 01/11/2009 C
4 01/21/2009 A

Necesito obtener los resultados más recientes de cada cliente así:
CodCli Fecha_actualizacion Tipo
1 01/11/2009 A
2 01/31/2009 D
3 03/01/2009 B
4 01/21/2009 A

Muchas gracias de antemano!
SQL Server 2008

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
26/05/2009 - 15:05 | Informe spam
DT,

Hechale un vistazo a las funciones de ranking como rank, dense_rank, y
row_number, en los BOL.

with r_set
as
(
select
CodCli, Fecha_actualizacion, Tipo,
row_number() over(partition by CodCli order by Fecha_actualizacion DESC)
as rn
from
tu_tabla
)
select
from r_set
where rn = 1;
go


AMB

"DT" wrote:

Hola a todos
Tengo una tabla con los siguientes datos:

CodCli Fecha_actualizacion Tipo
1 01/11/2009 A
1 01/01/2009 E
2 01/21/2009 A
2 01/31/2009 D
3 02/01/2009 A
3 03/01/2009 B
4 01/11/2009 C
4 01/21/2009 A

Necesito obtener los resultados más recientes de cada cliente así:
CodCli Fecha_actualizacion Tipo
1 01/11/2009 A
2 01/31/2009 D
3 03/01/2009 B
4 01/21/2009 A

Muchas gracias de antemano!
SQL Server 2008


Respuesta Responder a este mensaje
#2 DT
26/05/2009 - 15:21 | Informe spam
Gracias!

"Alejandro Mesa" wrote in message
news:
DT,

Hechale un vistazo a las funciones de ranking como rank, dense_rank, y
row_number, en los BOL.

with r_set
as
(
select
CodCli, Fecha_actualizacion, Tipo,
row_number() over(partition by CodCli order by Fecha_actualizacion
DESC)
as rn
from
tu_tabla
)
select
from r_set
where rn = 1;
go


AMB

"DT" wrote:

Hola a todos
Tengo una tabla con los siguientes datos:

CodCli Fecha_actualizacion Tipo
1 01/11/2009 A
1 01/01/2009 E
2 01/21/2009 A
2 01/31/2009 D
3 02/01/2009 A
3 03/01/2009 B
4 01/11/2009 C
4 01/21/2009 A

Necesito obtener los resultados más recientes de cada cliente así:
CodCli Fecha_actualizacion Tipo
1 01/11/2009 A
2 01/31/2009 D
3 03/01/2009 B
4 01/21/2009 A

Muchas gracias de antemano!
SQL Server 2008


Respuesta Responder a este mensaje
#3 Penta
27/05/2009 - 05:26 | Informe spam
Porque no usando Max() ????

Algo asi?

Select codcli,Fecha_actualizacion,Tipo
From Tabla A Inner Join
(
Select codcli,max(Fecha_actualizacion) Fecha_actualizacion From Tabla
Group By codcli
) B
On a.codcli=b.codcli

Saludos.
PENTA.
Respuesta Responder a este mensaje
#4 Alejandro Mesa
27/05/2009 - 19:55 | Informe spam
Penta,

Seguro quicistes decir:

Select codcli,Fecha_actualizacion,Tipo
From Tabla A Inner Join
(
Select codcli,max(Fecha_actualizacion) Fecha_actualizacion From Tabla
Group By codcli
) B
On a.codcli=b.codcli
and A.Fecha_actualizacion = B.Fecha_actualizacion;
GO

Claro que esta query es valida. Yo sugeri el uso de la funcion row_number
porque suele tener mejor rendimiento. En su caso, si se tiene un indice como
"(CodCli, Fecha_actualizacion DESC) include(Tipo)", solo haria falta una
pasada.

Pudieramos pedirle a DT que trate con ambas sentencias y postee los planes
de ejecucion, si es posible, incluyendo costo referente al batch.


AMB


"Penta" wrote:

Porque no usando Max() ????

Algo asi?

Select codcli,Fecha_actualizacion,Tipo
From Tabla A Inner Join
(
Select codcli,max(Fecha_actualizacion) Fecha_actualizacion From Tabla
Group By codcli
) B
On a.codcli=b.codcli

Saludos.
PENTA.


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida