Top 1 y Group By

25/02/2009 - 15:27 por María | Informe spam
Tabla (solo con los campos relevantes)
grupo, fecha, otros datos

Quiero obtener el primer registro de cada grupo ordenado por fecha

Por ej, para un solo grupo sería:

select Top 1 fecha, otros datos from Tabla where grupo ='01' order by fecha

pero yo lo quiero para todos los grupos.

Se puede?

Preguntas similare

Leer las respuestas

#1 Carlos Sacristan
25/02/2009 - 15:29 | Informe spam
No dices qué versión de SQL Server tienes. Suponiendo que sea 2005, una
posible solución podría ser:


CREATE TABLE #t (grupo CHAR(2), fecha SMALLDATETIME)
GO
INSERT #t
SELECT 'c1', '20090101'
UNION
SELECT 'c1', '20090105'
UNION
SELECT 'c2', '20090201'
UNION
SELECT 'c2', '20090203'

SELECT *
FROM (SELECT grupo, fecha, ROW_NUMBER() OVER(PARTITION BY grupo ORDER BY
fecha) rn FROM #t) t
WHERE rn = 1



Un saludo
-
www.navento.com
Servicios de Localización GPS


"María" wrote:

Tabla (solo con los campos relevantes)
grupo, fecha, otros datos

Quiero obtener el primer registro de cada grupo ordenado por fecha

Por ej, para un solo grupo sería:

select Top 1 fecha, otros datos from Tabla where grupo ='01' order by fecha

pero yo lo quiero para todos los grupos.

Se puede?


Respuesta Responder a este mensaje
#2 Alejandro Mesa
25/02/2009 - 15:31 | Informe spam
María,

Cual version de SQL Server estas usando?

select *
from tu_tabla as a
where fecha = (
select min(b.fecha)
from tu_tabla as b
where b.grupo = a.grupo
);
GO

;with r_set
as
(
select *, rank() over(partition by groupo order by fecha) as rnk
from tu_tabla
)
select *
from r_set
where rnk = 1;
GO

En caso de tener varias filas para una misma fecha, entonces tendremos que
buscar otra columna para romper el empate.


AMB


"María" wrote:

Tabla (solo con los campos relevantes)
grupo, fecha, otros datos

Quiero obtener el primer registro de cada grupo ordenado por fecha

Por ej, para un solo grupo sería:

select Top 1 fecha, otros datos from Tabla where grupo ='01' order by fecha

pero yo lo quiero para todos los grupos.

Se puede?


Respuesta Responder a este mensaje
#3 María
25/02/2009 - 20:24 | Informe spam
Es la 2008. Gracias, funciona!.


"Carlos Sacristan" escribió en
el mensaje news:

No dices qué versión de SQL Server tienes. Suponiendo que sea 2005, una
posible solución podría ser:


CREATE TABLE #t (grupo CHAR(2), fecha SMALLDATETIME)
GO
INSERT #t
SELECT 'c1', '20090101'
UNION
SELECT 'c1', '20090105'
UNION
SELECT 'c2', '20090201'
UNION
SELECT 'c2', '20090203'

SELECT *
FROM (SELECT grupo, fecha, ROW_NUMBER() OVER(PARTITION BY grupo ORDER BY
fecha) rn FROM #t) t
WHERE rn = 1



Un saludo
-
www.navento.com
Servicios de Localización GPS


"María" wrote:

Tabla (solo con los campos relevantes)
grupo, fecha, otros datos

Quiero obtener el primer registro de cada grupo ordenado por fecha

Por ej, para un solo grupo sería:

select Top 1 fecha, otros datos from Tabla where grupo ='01' order by
fecha

pero yo lo quiero para todos los grupos.

Se puede?


Respuesta Responder a este mensaje
#4 María
25/02/2009 - 20:25 | Informe spam
Es la 2008. Mil gracias!


"Alejandro Mesa" escribió en el
mensaje news:
María,

Cual version de SQL Server estas usando?

select *
from tu_tabla as a
where fecha = (
select min(b.fecha)
from tu_tabla as b
where b.grupo = a.grupo
);
GO

;with r_set
as
(
select *, rank() over(partition by groupo order by fecha) as rnk
from tu_tabla
)
select *
from r_set
where rnk = 1;
GO

En caso de tener varias filas para una misma fecha, entonces tendremos que
buscar otra columna para romper el empate.


AMB


"María" wrote:

Tabla (solo con los campos relevantes)
grupo, fecha, otros datos

Quiero obtener el primer registro de cada grupo ordenado por fecha

Por ej, para un solo grupo sería:

select Top 1 fecha, otros datos from Tabla where grupo ='01' order by
fecha

pero yo lo quiero para todos los grupos.

Se puede?


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