¿puedo hacer? select max(select max1, select max2)

15/12/2004 - 12:54 por -=JOE MAN=- | Informe spam
Me explico.

Dentro de la misma tabla tengo tres campos numericos (c1,c2,c3) y
necesito encontrar el máximo valor de entre los máximos valores de los
tres campos. O sea , esto:

SELECT MAX(select max(c1)from tabla,select max(c2)from tabla,select
max(c3)from tabla) FROM TABLA)

Y si no es esto posible ¿existe una aproximación al problema? Ahora lo
tengo en un procedimiento almacenado con varios IF, pero no me gusta
nada. Es muy poco elegante.


gracias mil

Preguntas similare

Leer las respuestas

#1 Tako
15/12/2004 - 13:24 | Informe spam
-=JOE MAN=- wrote:
Me explico.

Dentro de la misma tabla tengo tres campos numericos (c1,c2,c3) y
necesito encontrar el máximo valor de entre los máximos valores de los
tres campos. O sea , esto:

SELECT MAX(select max(c1)from tabla,select max(c2)from tabla,select
max(c3)from tabla) FROM TABLA)




Que tal algo de este estilo

select max(case
when c1 > c2 and c1 > c3 then c1
when c2 > c1 and c2 >c3 then c2
else c3
end )

from tabla


Y si no es esto posible ¿existe una aproximación al problema? Ahora lo
tengo en un procedimiento almacenado con varios IF, pero no me gusta
nada. Es muy poco elegante.


gracias mil
Respuesta Responder a este mensaje
#2 Carlos Sacristán
15/12/2004 - 13:28 | Informe spam
Lo puedes hacer con CASE. Por ejemplo, la siguiente sentencia mostraría
el valor máximo de tres campos de la tabla order details de northwind:

SELECT maximo=MAX(CASE WHEN productid > unitprice THEN CASE WHEN productid >
quantity THEN productid ELSE quantity END ELSE unitprice END) FROM [order
details]




Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

"-=JOE MAN=-" escribió en el mensaje
news:
Me explico.

Dentro de la misma tabla tengo tres campos numericos (c1,c2,c3) y
necesito encontrar el máximo valor de entre los máximos valores de los
tres campos. O sea , esto:

SELECT MAX(select max(c1)from tabla,select max(c2)from tabla,select
max(c3)from tabla) FROM TABLA)

Y si no es esto posible ¿existe una aproximación al problema? Ahora lo
tengo en un procedimiento almacenado con varios IF, pero no me gusta
nada. Es muy poco elegante.


gracias mil
Respuesta Responder a este mensaje
#3 Salvador Ramos
15/12/2004 - 13:31 | Informe spam
De momento te paso esta, aunque voy a ver si puedo hacer otra con mejor
rendimiento:

SELECT MAX(c1)
FROM (
SELECT MAX(campo1) AS c1
FROM TuTabla
UNION ALL
SELECT MAX(campo2) AS c1
FROM TuTabla
UNION ALL
SELECT MAX(campo3) AS c1
FROM TuTabla
) AS T1


Un saludo
Salvador Ramos
Murcia - España
[Microsoft MVP SQL Server]
www.helpdna.net
¿Te interesa participar en las reuniones
del grupo de Usuarios de SQL-Server y .NET
Se harán en levante de España, (Alicante o Murcia)?

"-=JOE MAN=-" escribió en el mensaje
news:
Me explico.

Dentro de la misma tabla tengo tres campos numericos (c1,c2,c3) y
necesito encontrar el máximo valor de entre los máximos valores de los
tres campos. O sea , esto:

SELECT MAX(select max(c1)from tabla,select max(c2)from tabla,select
max(c3)from tabla) FROM TABLA)

Y si no es esto posible ¿existe una aproximación al problema? Ahora lo
tengo en un procedimiento almacenado con varios IF, pero no me gusta
nada. Es muy poco elegante.


gracias mil
Respuesta Responder a este mensaje
#4 -=JOE MAN=-
15/12/2004 - 14:06 | Informe spam
Algo falla en esta SELECT con CASE que me pasaste Tako.
Siguiendo tu lógica Si yo ejecuto:

select max(case
when c1 > c2 and c1 > c3 then c1
when c2 > c1 and c2 > c3 then c2
else c3
end )
from TABLA WHERE Cliente='1'

El resultado es: 795

Pero si hago

SELECT MAX(C1) FROM TABLA WHERE CLIENTE='1'
SELECT MAX(C2) FROM TABLA WHERE CLIENTE='1'
SELECT MAX(C3) FROM TABLA WHERE CLIENTE='1'

El resultado es:
74
79
78

Algo no me cuadra.



Tako wrote:


Que tal algo de este estilo

select max(case
when c1 > c2 and c1 > c3 then c1
when c2 > c1 and c2 >c3 then c2
else c3
end )

from tabla

Respuesta Responder a este mensaje
#5 Salvador Ramos
15/12/2004 - 15:57 | Informe spam
De qué tipo de datos son los campos c1, c2 y c3 ?
Podrías poner aquí los DDLs y las inserts de los datos con los que estás
utilizando para que lo podamos probar ?

Un saludo
Salvador Ramos
Murcia - España
[Microsoft MVP SQL Server]
www.helpdna.net
¿Te interesa participar en las reuniones
del grupo de Usuarios de SQL-Server y .NET
Se harán en levante de España, (Alicante o Murcia)?

"-=JOE MAN=-" escribió en el mensaje
news:
Algo falla en esta SELECT con CASE que me pasaste Tako.
Siguiendo tu lógica Si yo ejecuto:

select max(case
when c1 > c2 and c1 > c3 then c1
when c2 > c1 and c2 > c3 then c2
else c3
end )
from TABLA WHERE Cliente='1'

El resultado es: 795

Pero si hago

SELECT MAX(C1) FROM TABLA WHERE CLIENTE='1'
SELECT MAX(C2) FROM TABLA WHERE CLIENTE='1'
SELECT MAX(C3) FROM TABLA WHERE CLIENTE='1'

El resultado es:
74
79
78

Algo no me cuadra.



Tako wrote:

>
> Que tal algo de este estilo
>
> select max(case
> when c1 > c2 and c1 > c3 then c1
> when c2 > c1 and c2 >c3 then c2
> else c3
> end )
>
> from tabla
>
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida