tengo un lío con una consulta que no logro resolver. Lo primero:
Estamos hablando de DBase vía ODBC con las restricciones que ello implica, sobretodo en materia de subquerys.
Lo que necesito es sacar un listado de clientes que tengan compras todos los meses de un año en concreto (o por año).
Lo máximo que he conseguido hacer es esto:
Código SQL:
Ver original
SELECT nombre FROM clientes c WHERE clatip=2 AND c.clacli IN (SELECT clacli FROM factura WHERE MONTH(fecha)=1 AND YEAR(fecha)=2012) AND c.clacli IN (SELECT clacli FROM factura WHERE MONTH(fecha)=2 AND YEAR(fecha)=2012) AND c.clacli IN (SELECT clacli FROM factura WHERE MONTH(fecha)=3 AND YEAR(fecha)=2012)
Pero claro, no sólo es feo sino que el rendimiento es pésimo.
¿Alguna sugerencia?
Gracias!
Ahora llegué hasta esto. Parece que los datos dan bien pero no se si es correcto o hay alguna otra forma mejor:
Código SQL:
Ver original
SELECT nombre FROM clientes WHERE clatip=2 AND clacli IN (SELECT clacli, MONTH(fecha) AS 'mes' FROM factura WHERE YEAR(fecha)=2012 GROUP BY clacli, mes HAVING COUNT(clacli)=12)
El problema ahora, es que la subconsulta está bien, pero no me deja hacer el IN porque claro, estoy devolviendo el clacli (clave cliente) y también el mes, pero es que sino pongo el mes no puedo agrupar por mes. Si intento agrupar con month(fecha) directamente no va.
Me acabo de dar cuenta que así da mal claro. Tendría que ser HAVING COUNT(mes)=12 pero da error. Debe ser limitación de DBase