Select

05/05/2004 - 16:14 por Julio | Informe spam
Hola Grupo

Tengo una tabla con lo Siguiente:

ClienteID Precio
1 12
1 30
1 20
2 40
2 25
2 60

Lo que busco es hacer un select que me traiga el promedio de los dos mas
alto registro por usuario
ejemplo

ClienteID Precio
1 25
2 50

Preguntas similare

Leer las respuestas

#1 Anibal Marcano
05/05/2004 - 17:03 | Informe spam
Seguro hay soluciones mas sencillas, pero mientras tanto, esta te puede
servir

Select ClienteID, Avg(Precio) FROM Prueba P1 Where
Cast(ClienteId as Varchar(10)) + Cast(Precio as Varchar(10)) In
(select top 2 Cast(ClienteId as Varchar(10)) + Cast(Precio as Varchar(10))
from prueba P2 Where P1.ClienteId = P2.ClienteID order by precio desc)
Group by ClienteId

Saludos,

Anibal Marcano
MVP ASP.Net
Visualven Sistemas

"Julio" wrote in message
news:OXg$
Hola Grupo

Tengo una tabla con lo Siguiente:

ClienteID Precio
1 12
1 30
1 20
2 40
2 25
2 60

Lo que busco es hacer un select que me traiga el promedio de los dos mas
alto registro por usuario
ejemplo

ClienteID Precio
1 25
2 50


Respuesta Responder a este mensaje
#2 manel gonzalez
05/05/2004 - 17:16 | Informe spam
Prueba con esto:

SELECT CLIENTEID, PRECIO = MAX(PRECIO)
INTO #PRECIOS
FROM TU_TABLA
GROUP BY CLIENTEID

INSERT #PRECIOS
SELECT TU_TABLA.CLIENTEID, PRECIO = MAX(TU_TABLA.PRECIO)
FROM TU_TABLA
INNER JOIN #PRECIOS P ON TU_TABLA.CLIENTEID = P.CLIENTEID
WHERE P.PRECIO > TU_TABLA.PRECIO
GROUP BY TU_TABLA.CLIENTEID

SELECT CLIENTEID, SUM(PRECIO/2) FROM #PRECIOS GROUP BY CLIENTEID


Puedes hacerlo todo de una tacada si sustituyes #PRECIOS por una subselect.

PERO ATENCIÓN!!! Esto solo funciona si los dos precios mas alton no son
iguales
Si tuvieses

ClienteID Precio
1 12
1 30
1 20
2 40
2 60
2 60

el resultado esperado seria

ClienteID Precio
1 25
2 60

pero a ti te continuaria dando
ClienteID Precio
1 25
2 50


Para hacerlo correctamente deberias poner otro campo (un id por ejemplo)
para discriminar al buscar el 2º precio mas alto únicamente el registro que
hayas encontrado (con un top 1 order by precio desc)

En fin ... espero que te sirva


"Julio" escribió en el mensaje
news:OXg$
Hola Grupo

Tengo una tabla con lo Siguiente:

ClienteID Precio
1 12
1 30
1 20
2 40
2 25
2 60

Lo que busco es hacer un select que me traiga el promedio de los dos mas
alto registro por usuario
ejemplo

ClienteID Precio
1 25
2 50


Respuesta Responder a este mensaje
#3 ulises
05/05/2004 - 17:58 | Informe spam
Prueba con :

create table tempo ( clienteid int, precio decimal(15,2) )
go
insert into tempo values (1,12)
insert into tempo values (1,30)
insert into tempo values (1,20)
insert into tempo values (2,40)
insert into tempo values (2,25)
insert into tempo values (2,60)
go
select clienteid, avg(precio) as promedio
from ( select t1.clienteid, t1.precio, count(*) as
secuencia
from tempo t1 join tempo t2
on t1.clienteid = t2.clienteid AND t1.precio <=
t2.precio
group by t1.clienteid, t1.precio
) s
where s.secuencia <= 2
group by clienteid

resultado :

clienteid promedio
1 25.000000
2 50.000000

(2 row(s) affected)

Saludos,
Ulises

Hola Grupo

Tengo una tabla con lo Siguiente:

ClienteID Precio
1 12
1 30
1 20
2 40
2 25
2 60

Lo que busco es hacer un select que me traiga el promedio


de los dos mas
alto registro por usuario
ejemplo

ClienteID Precio
1 25
2 50


.

Respuesta Responder a este mensaje
#4 Julio
05/05/2004 - 18:43 | Informe spam
En este caso necesitaria que si existe dos numero iguales inferior a un
tercero me sume el tercero y uno de los dos inferiores y lo divida entre 2.

Ejemplo
Clienteid precio
1 75
1 25
1 25

Resultado

Clienteid precio
1 50






"ulises" wrote in message
news:8b9501c432b9$c2a22000$
Prueba con :

create table tempo ( clienteid int, precio decimal(15,2) )
go
insert into tempo values (1,12)
insert into tempo values (1,30)
insert into tempo values (1,20)
insert into tempo values (2,40)
insert into tempo values (2,25)
insert into tempo values (2,60)
go
select clienteid, avg(precio) as promedio
from ( select t1.clienteid, t1.precio, count(*) as
secuencia
from tempo t1 join tempo t2
on t1.clienteid = t2.clienteid AND t1.precio <> t2.precio
group by t1.clienteid, t1.precio
) s
where s.secuencia <= 2
group by clienteid

resultado :

clienteid promedio
1 25.000000
2 50.000000

(2 row(s) affected)

Saludos,
Ulises

>Hola Grupo
>
>Tengo una tabla con lo Siguiente:
>
>ClienteID Precio
> 1 12
> 1 30
> 1 20
> 2 40
> 2 25
> 2 60
>
>Lo que busco es hacer un select que me traiga el promedio
de los dos mas
>alto registro por usuario
> ejemplo
>
>ClienteID Precio
> 1 25
> 2 50
>
>
>.
>
Respuesta Responder a este mensaje
#5 ulises
05/05/2004 - 19:12 | Informe spam
Tienes razón, prueba con :

select clienteid, avg(precio) as promedio
from ( select t1.clienteid,
t1.precio,
count(*) as secuencia
from (select distinct clienteid, precio from tempo)
t1
join
(select distinct clienteid, precio from tempo)
t2
on t1.clienteid = t2.clienteid AND t1.precio <=
t2.precio
group by t1.clienteid, t1.precio
) s
where s.secuencia <= 2
group by clienteid

Has pruebas de rendimiento.

Saludos,
Ulises

En este caso necesitaria que si existe dos numero iguales


inferior a un
tercero me sume el tercero y uno de los dos inferiores y


lo divida entre 2.

Ejemplo
Clienteid precio
1 75
1 25
1 25

Resultado

Clienteid precio
1 50






"ulises" wrote in message
news:8b9501c432b9$c2a22000$
Prueba con :

create table tempo ( clienteid int, precio decimal




(15,2) )
go
insert into tempo values (1,12)
insert into tempo values (1,30)
insert into tempo values (1,20)
insert into tempo values (2,40)
insert into tempo values (2,25)
insert into tempo values (2,60)
go
select clienteid, avg(precio) as promedio
from ( select t1.clienteid, t1.precio, count(*) as
secuencia
from tempo t1 join tempo t2
on t1.clienteid = t2.clienteid AND t1.precio <>> t2.precio
group by t1.clienteid, t1.precio
) s
where s.secuencia <= 2
group by clienteid

resultado :

clienteid promedio
1 25.000000
2 50.000000

(2 row(s) affected)

Saludos,
Ulises

>Hola Grupo
>
>Tengo una tabla con lo Siguiente:
>
>ClienteID Precio
> 1 12
> 1 30
> 1 20
> 2 40
> 2 25
> 2 60
>
>Lo que busco es hacer un select que me traiga el




promedio
de los dos mas
>alto registro por usuario
> ejemplo
>
>ClienteID Precio
> 1 25
> 2 50
>
>
>.
>




.

Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida