Ver Mensaje Individual
  #8 (permalink)  
Antiguo 06/03/2012, 16:02
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 wchiquito:

En espera de lo que nos pueda confirmar el autor del post ebolavih, hay un pequeño detalle con la consulta que propone. La consulta obtiene el mínimo precio de todos los vendedores. Por lo que entendí lo que se pide es obtener el mínimo precio para cada vendedor... supongamos que se tienen los siguientes datos en lugar de los propuestos en mi primer post;

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 |      8 | 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.02 sec)

Al realizar ambas consultas se obtienen estos resultados:



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

Sólo sería cuestión de considerar también al vendedor en la subconsulta interna:

Código MySQL:
Ver original
  1. mysql> SELECT
  2.     ->  t1.id,
  3.     ->  t1.precio,
  4.     ->  t1.vendedor,
  5.     ->  t1.articulo,
  6.     ->  t1.oficina
  7.     -> FROM
  8.     ->  tabla t1
  9.     -> WHERE
  10.     ->  t1.articulo = 'articulo a' AND
  11.     ->  t1.oficina = 'oficina a' AND
  12.     ->  t1.precio = (SELECT MIN(precio)
  13.     ->                  FROM
  14.     ->                          tabla
  15.     ->                  WHERE
  16.     ->                          articulo = t1.articulo AND
  17.     ->                          oficina = t1.oficina AND
  18.     ->                          vendedor = t1.vendedor);
  19. +------+--------+------------+------------+-----------+
  20. | id   | precio | vendedor   | articulo   | oficina   |
  21. +------+--------+------------+------------+-----------+
  22. |    1 |     10 | vendedor 1 | articulo a | oficina a |
  23. |    5 |      8 | vendedor 2 | articulo a | oficina a |
  24. |    9 |     10 | vendedor 1 | articulo a | oficina a |
  25. +------+--------+------------+------------+-----------+
  26. 3 rows in set (0.00 sec)

Y vuelvo a insistir, ahora que tiene varias opciones ebolavih debería probarlas todas y decirnos cuál de ellas representó la mejor alternativa, para poder considerarlo en un futuro.

Saludos
Leo.