Ver Mensaje Individual
  #6 (permalink)  
Antiguo 06/03/2012, 13:33
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Problema son SQL MIN() Obtener ID del registro

Hola ebolavih:

La consulta de repara2 podría funcionar (agregando la parte de los filtros que comentas), sin embargo, en la medida de lo posible, hay que evitar el uso de restricciones IN al filtrar información, ya que estas son las peores en cuanto a rendimiento. En su defecto hay que utilizar EXISTS o como muestro a continuación hay una alternativa utilizando JOIN's que posiblemente te pueda ayudar:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +------+--------+------------+------------+-----------+
  3. | ID   | PRECIO | VENDEDOR   | ARTICULO   | OFICINA   |
  4. +------+--------+------------+------------+-----------+
  5. |    1 |     10 | vendedor 1 | articulo a | oficina a |
  6. |    2 |     12 | vendedor 1 | articulo a | oficina a |
  7. |    3 |     12 | vendedor 1 | articulo b | oficina b |
  8. |    4 |     13 | vendedor 1 | articulo b | oficina b |
  9. |    5 |     10 | vendedor 2 | articulo a | oficina a |
  10. |    6 |     11 | vendedor 2 | articulo a | oficina a |
  11. |    7 |     20 | vendedor 2 | articulo b | oficina b |
  12. |    8 |     10 | vendedor 2 | articulo b | oficina b |
  13. |    9 |     10 | vendedor 1 | articulo a | oficina a |
  14. +------+--------+------------+------------+-----------+
  15. 9 rows in set (0.00 sec)
  16.  
  17. mysql> SELECT T1.* FROM tabla T1 INNER JOIN
  18.     -> (SELECT vendedor, MIN(precio) min_precio FROM tabla
  19.     -> WHERE articulo = 'articulo a' AND oficina = 'oficina a'
  20.     -> GROUP BY vendedor) T2
  21.     -> ON T1.vendedor = T2.vendedor AND T1.precio = T2.min_precio
  22.     -> WHERE T1.articulo = 'articulo a' AND T1.oficina = 'oficina a';
  23. +------+--------+------------+------------+-----------+
  24. | ID   | PRECIO | VENDEDOR   | ARTICULO   | OFICINA   |
  25. +------+--------+------------+------------+-----------+
  26. |    1 |     10 | vendedor 1 | articulo a | oficina a |
  27. |    5 |     10 | vendedor 2 | articulo a | oficina a |
  28. |    9 |     10 | vendedor 1 | articulo a | oficina a |
  29. +------+--------+------------+------------+-----------+
  30. 3 rows in set (0.00 sec)

Observa que para el vendedor 1 hay dos registros (con id 1 y 9) ya que ambos tienen el min precio. Dale un vistazo para ver si esto es más o menos lo que necesitas. Sería un buen ejercicio que analices todas la alternativas que se te han dado para que nos digas cuál resulta más eficiente con tus datos.

Saludos
Leo.