Hola sosajuancarlosh:
Veo que este es tu primer mensaje, así es que antes que nada, bienvenido al foro, espero que sigas participando activamente en el foro, y si puedes hacer alguna contribución, pues adelante!.
ahora si, pasemos a tu problema... por lo que pude observar casi lograbas la consulta, creo que era solo cuestión de que continuaras investigando un poco... Las condiciones de filtrado pueden ser tan sencillas o tan complejas como necesites, para lo que tú quieres hacer de hecho hay muchas formas en que puedas conseguirla (con NOT IN, NOT EXISTS, o LEFT JOIN)... para el ejemplo voy a utilizar NOT EXISTS.
En la consulta que pones en tu post utilizas de manera correcta el operador OR, ya que en realidad son dos condiciones las que te interesan:
Código:
posicion = 1 or (posicion > 1 AND manual = .t.)
Sin embargo, la primer parte de la condición, marcada con azul está incompleta, dado que debes excluir aquellos registros que cumplen con la segunda condición. Como te dije, hay varias formas de hacer esto, una sería así:
Código MySQL:
Ver original+------------+-----------+--------+----------+----------+-------------+
| idproducto | proveedor | precio | cantidad | posicion | selecmanual |
+------------+-----------+--------+----------+----------+-------------+
| 1000 | prove1 | 0.5 | 12 | 1 | .f. |
| 1000 | prove2 | 0.53 | 12 | 2 | .f. |
| 1000 | prove3 | 1 | 12 | 3 | .f. |
| 1001 | prove1 | 1.2 | 11 | 1 | .f. |
| 1001 | prove2 | 1.5 | 11 | 2 | .t. |
+------------+-----------+--------+----------+----------+-------------+
-> WHERE o2.idproducto
= o1.idproducto
-> AND o2.selecmanual
= '.t.') -> (o1.posicion
> 1 AND o1.selecmanual
= '.t.'); +------------+-----------+--------+----------+----------+-------------+
| idproducto | proveedor | precio | cantidad | posicion | selecmanual |
+------------+-----------+--------+----------+----------+-------------+
| 1000 | prove1 | 0.5 | 12 | 1 | .f. |
| 1001 | prove2 | 1.5 | 11 | 2 | .t. |
+------------+-----------+--------+----------+----------+-------------+
Observa que lo único que estoy haciendo es agregar una condición con NOT EXISTS para excluir los registros duplicados.
Código:
SELECT * FROM oferta o1
WHERE
(o1.posicion = 1 AND NOT EXISTS ( SELECT o2.idproducto
FROM oferta o2
WHERE o2.idproducto = o1.idproducto
AND o2.selecmanual = '.t.')
) OR
(o1.posicion > 1 AND o1.selecmanual = '.t.');
Trata de analizar la consulta, y si tienes algún problema para entenderla, coméntalo en el foro. Y finalmente, como recomendación PRACTICA, PRACTICA Y PRACTICA... es la mejor manera para adquirir conocimientos en SQL.
Saludos
Leo.