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+------+--------+------------+------------+-----------+
| ID | PRECIO | VENDEDOR | ARTICULO | OFICINA |
+------+--------+------------+------------+-----------+
| 1 | 10 | vendedor 1 | articulo a | oficina a |
| 2 | 12 | vendedor 1 | articulo a | oficina a |
| 3 | 12 | vendedor 1 | articulo b | oficina b |
| 4 | 13 | vendedor 1 | articulo b | oficina b |
| 5 | 10 | vendedor 2 | articulo a | oficina a |
| 6 | 11 | vendedor 2 | articulo a | oficina a |
| 7 | 20 | vendedor 2 | articulo b | oficina b |
| 8 | 10 | vendedor 2 | articulo b | oficina b |
| 9 | 10 | vendedor 1 | articulo a | oficina a |
+------+--------+------------+------------+-----------+
-> WHERE articulo
= 'articulo a' AND oficina
= 'oficina a' -> ON T1.vendedor
= T2.vendedor
AND T1.precio
= T2.min_precio
-> WHERE T1.articulo
= 'articulo a' AND T1.oficina
= 'oficina a'; +------+--------+------------+------------+-----------+
| ID | PRECIO | VENDEDOR | ARTICULO | OFICINA |
+------+--------+------------+------------+-----------+
| 1 | 10 | vendedor 1 | articulo a | oficina a |
| 5 | 10 | vendedor 2 | articulo a | oficina a |
| 9 | 10 | vendedor 1 | articulo a | oficina a |
+------+--------+------------+------------+-----------+
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.