Como seleccionar estos registros ??

11/03/2008 - 13:53 por Penta | Informe spam
Estimados.
Utilizo SQL SERVER 2000 SP4

Tengo una tabla, que tiene lo siguiente:

codigo nivel cantidad

Primer caso:

codigo nivel cantidad
1 1 2
1 3 3
1 8 5

Necesito quedarme con el 3er registro que es el que tiene una mayor
numero en el campo cantidad. por otro lado, y este es el 2do caso:

codigo nivel cantidad
2 1 3
2 3 3

Aca necesito quedarme con el primer registro, ya que tienen la misma
cantidad pero el nivel que deseo debe ser el menor.

Ojala pudiesen ayudarme y si es posible hacerlo en una misma consulta.

Siempre agradecido del foro.
Penta.

Preguntas similare

Leer las respuestas

#6 Penta
11/03/2008 - 15:36 | Informe spam
Una enesima vez: SE PASARON !!!!!
Ambas qrys obtienen los mismos resultados y se agradece.

Por ultimo si no es mucha la molestia, me gustaria entender las
consultas para poder aplicar similar logica a futuras situaciones.

De que forma esta query obtiene el max de un determinado registro ??
select *
from #temp2 as a
where
not exists (
select *
from #temp2 as b
where
b.codigo = a.codigo
and
(
b.cantidad > a.cantidad
or
(
b.cantidad = a.cantidad
and b.nivel < a.nivel
)
)
)
Carlos M. Calvelo y jcac
Entiendo como sacan el min de nivel cuando codigo y max de cantidad
son iguales.
Y creo entender en el "as cantidad" sacan el max del registro
simpelmente lo cual esta bien.
La pregunta que tengo es un tanto compleja y es:
De que forma me puedo formar la logica de este tipo de consulta.

select t.codigo , (select min(nivel) from #temp2 where t.codigo codigo and
max(t.cantidad) = cantidad) as nivel, max(t.cantidad) as cantidad
from #temp2 t
group by t.codigo

Mil Gracias.
Penta.
Respuesta Responder a este mensaje
#7 Alejandro Mesa
11/03/2008 - 16:13 | Informe spam
Penta,

Este query selecciona todas las filas de la tabla [t1], para las cuales no
existe otra fila en la misma tabla, que tenga el mismo codigo y que a su vez
tenga un valor en la columna [cantidad] mayor al valor de la misma columna de
la fila corriente o que el valor de la cantidad es igual pero el nivel no es
menor al nivel de la fila corriente. En otras palabras, la fila para ese
codigo con mayor valor en la columna cantidad o en caso de empate, mayor
valor y menor nivel.

Si usas SQL Server 2005, te recomiendo uses la version que usa la funcion
ROW_NUMBER. Esta version suele tener mejor desempenio.


AMB

"Penta" wrote:

Una enesima vez: SE PASARON !!!!!
Ambas qrys obtienen los mismos resultados y se agradece.

Por ultimo si no es mucha la molestia, me gustaria entender las
consultas para poder aplicar similar logica a futuras situaciones.

De que forma esta query obtiene el max de un determinado registro ??
select *
from #temp2 as a
where
not exists (
select *
from #temp2 as b
where
b.codigo = a.codigo
and
(
b.cantidad > a.cantidad
or
(
b.cantidad = a.cantidad
and b.nivel < a.nivel
)
)
)
Carlos M. Calvelo y jcac
Entiendo como sacan el min de nivel cuando codigo y max de cantidad
son iguales.
Y creo entender en el "as cantidad" sacan el max del registro
simpelmente lo cual esta bien.
La pregunta que tengo es un tanto compleja y es:
De que forma me puedo formar la logica de este tipo de consulta.

select t.codigo , (select min(nivel) from #temp2 where t.codigo > codigo and
max(t.cantidad) = cantidad) as nivel, max(t.cantidad) as cantidad
from #temp2 t
group by t.codigo

Mil Gracias.
Penta.

Respuesta Responder a este mensaje
#8 jcac
11/03/2008 - 17:49 | Informe spam
Hola Penta,

Las consultas por ejemplo en mi caso las voy armando por partes, entonces,
segúnt u caso:

1. Deseas los maximos por cada codigo de la columan cantidad, entonces
primero consiguo eso:

select t.codigo, max(t.cantidad) from #tmp t group by t.codigo

hasta aqui esto
2. luego necesito obtener cual es su valor minimo de la columna nivel,
entonces ese lo consiguo con una subconsulta y obtengo el resultado final,
en la subconsulta la evaluo por t.codigo y max(t.cantidad) ya que esos son
los datos que ya filtre y obtengo:

select t.codigo,
(select min(nivel) from #tmp where t.codigo = codigo and max(t.cantidad) =
cantidad) as nivel, subconsulta
max(t.cantidad) as cantidad
from #tmp t
group by t.codigo

ahora como un punto aparte prove los planes de ejecución de las consultas de
todos y la que tiene mejor resultado es la de Alejandro.

Saludos

Juan Carlos


"Penta" escribió en el mensaje
news:
Una enesima vez: SE PASARON !!!!!
Ambas qrys obtienen los mismos resultados y se agradece.

Por ultimo si no es mucha la molestia, me gustaria entender las
consultas para poder aplicar similar logica a futuras situaciones.

De que forma esta query obtiene el max de un determinado registro ??
select *
from #temp2 as a
where
not exists (
select *
from #temp2 as b
where
b.codigo = a.codigo
and
(
b.cantidad > a.cantidad
or
(
b.cantidad = a.cantidad
and b.nivel < a.nivel
)
)
)
Carlos M. Calvelo y jcac
Entiendo como sacan el min de nivel cuando codigo y max de cantidad
son iguales.
Y creo entender en el "as cantidad" sacan el max del registro
simpelmente lo cual esta bien.
La pregunta que tengo es un tanto compleja y es:
De que forma me puedo formar la logica de este tipo de consulta.

select t.codigo , (select min(nivel) from #temp2 where t.codigo > codigo and
max(t.cantidad) = cantidad) as nivel, max(t.cantidad) as cantidad
from #temp2 t
group by t.codigo

Mil Gracias.
Penta.
Respuesta Responder a este mensaje
#9 Penta
11/03/2008 - 18:04 | Informe spam
Sensacional, lo malo es que no logro "ver" de forma clara la consulta
de Alejandro, que obviamente esta perfecta, pero me cuesta mas
entender la logica :( , pero bueno eso es un "desperfecto" en mi
cerebro :)

Gracias TOTALES

Penta.
Respuesta Responder a este mensaje
#10 Carlos M. Calvelo
11/03/2008 - 18:37 | Informe spam
Hola Juan Carlos,

On 11 mrt, 17:49, "jcac" wrote:

ahora como un punto aparte prove los planes de ejecución de las consultas de
todos y la que tiene mejor resultado es la de Alejandro.




Para mi gusto es también la mas elegante.
(Independientemente de lo que digan los planes de ejecución)

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