Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

no funciona correctamente mi DISTINCT

Estas en el tema de no funciona correctamente mi DISTINCT en el foro de Oracle en Foros del Web. hola!, estoy intentado hacer muy sencillo pero no logro realizarlo. estoy intentando mostrar los 10 primeros mejores tiempos del trabajo de unos equipos. a continuación ...
  #1 (permalink)  
Antiguo 21/08/2012, 11:07
Avatar de ras_chalo  
Fecha de Ingreso: junio-2010
Mensajes: 369
Antigüedad: 14 años, 6 meses
Puntos: 6
Pregunta no funciona correctamente mi DISTINCT

hola!,
estoy intentado hacer muy sencillo pero no logro realizarlo. estoy intentando mostrar los 10 primeros mejores tiempos del trabajo de unos equipos.

a continuación la query;

Código SQL:
Ver original
  1. --EQUIPOS Y SUS TIEMPOS
  2. SELECT DISTINCT
  3.     rec_equip_420,
  4.     Elapsed_Hours    
  5. FROM   MSV420
  6. WHERE
  7.     ROWNUM  <= 10
  8.      AND Rev_Stat_Year = '2010'
  9. ORDER BY Elapsed_Hours DESC

A continuación su resultado;


Si se fijan, se repiten los equipos en la primera columna, incluso si en el código agrego DISTINCT, y quiero que me muestre esos equipos sin repetir.

Cómo puedo solucinoarlo??
De ante mano Muchas gracias!!!

Espero sus repuestas!
Saludos!
  #2 (permalink)  
Antiguo 21/08/2012, 13:04
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: no funciona correctamente mi DISTINCT

Técnicamente, eso no es un error: Esa tabla conserva los tiempos de todas las maquinas, por lo que guarda todos los que se generan en cada una, y hablar de los "mejores" tiempos, sin discriminar si hablas de máximo so minimos, simplemente te devolverá los valores que correspondan a todas... incluyendo los diferentes r4egistrados en cada máquina.
No has hecho agrupamientos ni búsquedas finas, por lo que en realidad los toma a todos por igual, basados en una misma columna. Por eso se repiten los otros valores.
Tomando en cuenta que haces un ORDER BY descendente, hay que buscar los MAX():
Código SQL:
Ver original
  1. --EQUIPOS Y SUS TIEMPOS
  2. SELECT DISTINCT
  3.     rec_equip_420,
  4.     MAX(Elapsed_Hours) Elapsed_Hours
  5. FROM   MSV420
  6. WHERE
  7.     Rev_Stat_Year = '2010'
  8.     AND ROWNUM  <= 10
  9. GROUP BY rec_equip_420
  10. ORDER BY Elapsed_Hours DESC
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 21/08/2012, 14:51
Avatar de ras_chalo  
Fecha de Ingreso: junio-2010
Mensajes: 369
Antigüedad: 14 años, 6 meses
Puntos: 6
Pregunta Respuesta: no funciona correctamente mi DISTINCT

Muchas gracias por tu respuesta, me ha servido mucho!

solo una duda más, cestoy algo confundido con mis códigos; te muestro lo que tengo:

Gracias a tu respuesta me di cuenta que necesito los minimos (MIN) para mi ejercicio;


Mi pregunta acá es porqué el ROWNUM <= 10 hace que me entregue otros valores.

Ahora explico a lo que necesito llegar;

Necesito llegar a esto (datos de otra BD, pero de la misma tabla):


REC_EQUIP | ELAPSED_HOURS
--------------------------------------------
E2CAM309 | 12
E2CAM307 | 11,17
E2CAM302 | 9,5
E2CAM303 | 8,25
E2CAM305 | 7,67
E2CAM308 | 7,67
E2CAM312 | 5
E2CAM311 | 4,5
E2CAM314 | 4,34
E2CAM317 | 4
OTROS | 34,91

Lo que muestro son los 10 mayores tiempos de inactividad de equipos, en donde la última es la suma de todos los tiempos restantes de inactividad...

Se que debo hacerle un Sum() a todo un dataset o subquery de alguna manera, pero la verdad que llevo bastante rato intentando pero o me resulta...

Qué me recomiendas hacer??

Gracias por tu tiempo, dede ya muchas gracias!
Saludos

Etiquetas: correctamente, distinct, select
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:30.