Varios máximos en sql

Ya le di muchas vueltas a esto... Pero no puedo calcular los 3 máximos a una tabla en sql
Tengo una tabla con VARIOS "ids" los cuales se repiten muchas veces y estos "ids" tienen su valores, y quiero sacar los 3 valores máximos de cada "id"... Ojala me puedan ayudar.
Respuesta
1
Create proc sp_3ValoresMaximosxId
As
Declare @ide varchar(20)
Create table #tmp_maximos
(
Ide varchar(20),
valor numeric
)
Declare cur cursor for
Select ide from mytabla
Open cur
Fetch cur into @ide
While @@fetch_status =0
Begin
insert into #tmp_maximos
select top 3 valor
from mytabla
where ide = @ide
order by valor desc
Fetch cur into @ide
End
close cur
deallocate cur
select * from #tmp_maximos
order by ide,valor desc
Go
--Executando Store
exec sp_3ValoresMaximosxId
Gracias por contestar pero aun tengo algunos problemillas
Modifique los nombres de los campos a lo que tengo, así como los tipos de datos contenidos, pero tengo un problema con el primera declaración ya que como var o como int envía un error.
Error de insercin: el nombre de columna o los valores especificados no corresponden a la definicin de la tabla ( en linea 18)
Declare @rnc_id int
Create table #tmp_maximos
(
rnc_id int, rnc_645c int
)
Declare curs cursor for
Select rnc_id from FA_WBTS_02b_Average_HSPA_Users
Open curs
Fetch curs into @rnc_id
While @@fetch_status =0
Begin
insert into #tmp_maximos
select top 3 rnc_645c
from FA_WBTS_02b_Average_HSPA_Users
where rnc_id = @rnc_id
order by rnc_id,rnc_645c desc
Fetch curs into @rnc_id
End
close curs
deallocate curs
select * from #tmp_maximos
order by rnc_id, rnc_645c desc
Declare @rnc_id int
Create table #tmp_maximos
(
rnc_id int, rnc_645c int
)
Declare curs cursor for
Select rnc_id from FA_WBTS_02b_Average_HSPA_Users
Open curs
Fetch curs into @rnc_id
While @@fetch_status =0
Begin
insert into #tmp_maximos
select top 3 @rnc_id,rnc_645c
from FA_WBTS_02b_Average_HSPA_Users
where rnc_id = @rnc_id
order by rnc_id,rnc_645c desc
Fetch curs into @rnc_id
End
close curs
deallocate curs
select * from #tmp_maximos
order by rnc_id, rnc_645c desc
Ok bien... si funciono.. aunque la bd que tengo es bastante extensa casi 700 mil registros lo que hace algo tardado toda la consulta.
Habrá alguna manera de optimizar el tiempo o tal vez buscar algún otra solución con array. Encontré alguna función pero es para progrest espero adecuarla al sql.
Muchas gracias.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas