SQL Server - Sql tupla maxima en un set de datos

 
Vista:

Sql tupla maxima en un set de datos

Publicado por jorge ojeda duran (2 intervenciones) el 28/07/2016 20:01:50
Buenas, por favor un ayudita ... tengo un select que es simple pero me esta provocando dolorcito de craneo :-)

1
2
3
4
5
select MovRut, MovCodigo, Count(*) as Contador
from  ProT_Movimientos
where empid = 3
and MovRut ='0000000006-k'
group by MovRut, MovCodigo having Contador = Max(Contador)

Esto me devuelve

MovRut MovCodigo Contador
0000000006-k' 2 143
0000000006-k' 1 6505

Lo que trato de realizar es solo extraer la tupla Maxima que en este caso seria la tupla 6505
pero al parecer el having no me funciona... ALGUNA ALTERNATIVA ??? de antemano muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Sql tupla maxima en un set de datos

Publicado por jams (93 intervenciones) el 29/07/2016 18:37:17
Hola buenos días, podrias implementar algo sencillo como esto

declare @tabla table (empid int,movrut varchar(100),movcodigo int)

insert into @tabla values(3,'0000000006-k',2),(3,'0000000006-k',2),(3,'0000000006-k',2),(3,'0000000006-k',2),(3,'0000000006-k',2),(3,'0000000006-k',1),(3,'0000000006-k',1)


select* from @tabla

select top 1 MovRut, MovCodigo, Count(*) as Contador
from @tabla
where empid = 3
and MovRut ='0000000006-k'
group by MovRut, MovCodigo
order by contador desc

la clave es el ordenamiento descendente y el top 1

Saludos y suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Sql tupla maxima en un set de datos

Publicado por jorge ojeda duran (2 intervenciones) el 29/07/2016 18:48:55
Claro eso seria simple, pero me serviría para solo un rut.
Si lo pienso así.. podría generar un cursor y rescato de todos los rut el Max() pero no me sirve ya que son tablas de movimientos muy grandes... hacer un cursor ademas con Top 1 me comería la maquina.... así funciona OK:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Create Table #TmpT_MonedaMovimiento
	(Cantidad	Numeric(18,0) Not Null Default(0)
	,MovMonCodigo	Numeric(18,0) Not Null Default(0)
	,MovRut         VarChar(15) Not Null Default('') )
 
Insert Into #TmpT_MonedaMovimiento
Select Count(*)
      ,MovMonCodigo
      ,MovRut
From ProT_Movimientos (NoLock)
Where EmpId = @EmpId
Group By MovRut
	,MovMonCodigo
 
Select Count(*) As Cantidad
      ,MovMonCodigo
      ,MovRut
Into #MonedaMovimiento
From ProT_Movimientos Mov (NoLock)
Where EmpId = @EmpId
Group By MovRut
       , MovMonCodigo
Having Count(*) = (Select Max(Cantidad)
		   From #TmpT_MonedaMovimiento Mon (NoLock)
		   Where Ltrim(Rtrim(Mov.MovRut)) = Ltrim(Rtrim(Mon.MovRut)) )
 
Select * From #MonedaMovimiento Order By MovRut

Gracias por tu interés y colaboración.

Saludos JOD
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar