Filtrar los clientes que hace 1 año que no vienen al taller

No encuentro la solución a esta necesidad de filtrado

Access 2007-2010

Objetivo: saber todos los días, cuales son los clientes que llevan más de 1 año sin venir al negocio o
taller de reparaciones, para mostrarlos en un informe o formulario y luego contactarlos...

Hablamos de una tabla con más de 3000 registros y cerca de 1000 clientes en esta condición.

Ejemplo: campos de la tabla x

CODIGO (Alfanumerico -Texto, Código que identifica el aparato a Reparar) Texto

NOMBREcliente ( Nombre y Apellido) Texto

NUMOR (Número de Orden de Reparación ) Número e índice sin duplicados

FECHAOR ( Fecha en que vino el cliente o Fecha de la Orden de Reparación) Fecha corta

Podría ser por medio de una Consulta - Criterio sobre tabla x y en el campo FechaOR, para
ver HOY los registros anteriores a 365 días : < Fecha() - 365

Esto funciona y se puede actualizar día a día pero es necesario que si un cliente de esta
lista vuelve hoy o mañana, automáticamente desaparezca del listado o consulta " hace un año o 365
días que no viene al negocio o taller de reparaciones ".

Respuesta
2

Te lo explico con un ejemplo con menos datos, según lo que creo que pretendes:

1º/ Si tengo la tabla con estos datos:

Vemos que hay 3 registros de hace más de 1 año que no vienen por el taller, y que dos de esos clientes (María y Juan) volvieron otra vez hace menos de un año.

2º/ Si hago una consulta como la que mencionas ( SELECT TDatos. Codigo, Datos. NombreCliente, TDatos. NumOR, TDatos.FechaOR FROM TDatos WHERE (((TDatos. FechaOR)<Date()-365)) ), obtengo estos resultados:

Que coinciden con los marcados en la tabla.

Entiendo que tú lo que buscas es que tu consulta devuelva solo el registro correspondiente a 2-Pedro Jimenez, que es el único cliente en el ejemplo que hace más de un año que no nos viene a ver.

3º/ Para eso, crea una consulta con una subconsulta, como ésta:

SELECT TDatos.Codigo, TDatos.NombreCliente, TDatos.NumOR, TDatos.FechaOR
FROM TDatos
WHERE (((TDatos.NombreCliente) NOT IN (SELECT TDatos.NombreCliente FROM TDatos WHERE (((TDatos.FechaOR)>=Date()-365)))) AND ((TDatos.FechaOR)<Date()-365));

y al ejecutarla, te mostrará:

que es lo que andas buscando.

Fíjate que en esta consulta, uso dos criterios, uno que la fecha sea anterior al año, y el otro que el nombre no aparezca en los resultados de una subconsulta que devuelva los clientes que vinieron hace menos de un año.

Este segundo criterio es:  NOT IN (SELECT TDatos.NombreCliente FROM TDatos WHERE (((TDatos.FechaOR)>=Date()-365))))

Te dejo el archivo de ejemplo para que lo veas: http://www.filebig.net/files/uxjheKiRMN 

Hola Sveinbjorn, desde ya gracias por tu respuesta !,  tu ejemplo funciona perfecto según lo que necesito, pero ocurre que yo tengo el índice en la tabla sobre numOR (numérico)  y en tu ejemplo está sobre Código como autonumérico; en mi caso Código es texto y no es índice. 

Sobre mi tala real, no funciona la consulta 2.

Te paso el archivo con la modificación comentada y datos reales de tabla, donde la consulta 2 da como resultado cero registros (quizás por detectar algún error SQL ?) ya que el Cliente "EDUARDO TESTA" con el Código "TOV600"  ha venido 2 veces en Enero 2014 y no ha regresado. 

http://www.filebig.net/files/NNQVRWvVDH 

Lo único que se me ocurre es que como tienes registros con NombreCliente vacío, por ahí venga el error. Pero si haces el mismo planteamiento sobre el campo Código o NumOR (aunque ésta no es una opción para lo que buscas), verás que sí funciona.

De cualquier forma, te explico otra forma de llegar al mismo resultado: crear una consulta como la Consulta1, que devuelva todos los clientes cuya FechaOR sea más antigua de un año, otra consulta con la subconsulta que usamos, es decir, una consulta que devuelva todos los registros cuya FechaOR sea inferior a un año desde la fecha actual, y con estas dos consultas crear una consulta de búsqueda de no coincidentes, que es muy fácil de hacer siguiendo el asistente.

La cosa va así (según el ejemplo que te adjunto más abajo):

1º/ Vas a Crear - > Asistente para consultas

2º/ Eliges "asistente búsqueda de no coincidentes"

3º/ Te pregunta dónde tienes los registros a mostrar, eliges la "Consulta1" (es donde tienes los registros anteriores al año)

4º/ Te pregunta donde quieres buscar los no coincidentes, eliges la "Consulta3"

5º/ Te pregunta el campo en común, elijes "Codigo" en ambas (creo que te da mejor resultado que NombreCliente)

6º/ Escoges los campos a mostrar en la consulta y finalizas.

http://www.filebig.net/files/bjMZHaTRUc 

En el nuevo archivo te va:

a) La Consulta1 igual que antes

b) La Consulta3, que es la que devuelve los clientes que vinieron hace menos de un año. Verás que uso un SELECT DISTINCT porque no interesa tener registros duplicados, para optimizar el proceso.

c) La Consulta2-Codigo es como la Consulta2 inicial, pero poniendo el criterio en el campo Codigo y no en NombreCliente

d) La Consulta2-NumOR, lo mismo que c, pero usando NumOR como segundo criterio de filtrado

e) 'Consulta1' no coincidente con 'Consulta3' - Codigo, es una consulta de no coincidentes usando el campo Codigo para "eliminar" las coincidencias entre Consulta1 y Consulta3

f) 'Consulta1' no coincidente con 'Consulta3' - NombreCliente, lo mismo que e, pero usando NombreCliente.

Verás que los registros devueltos por C y E son los mismos, pero no coinciden con los de D y F, imagino que por los registros con campos en blanco y valores repetidos (en NombreCliente) y por ser únicos por registro (en NumOR)

Sveinbjorn, tu consulta SQL está correcta, no veo porqué no funciona con mi tabla, yo buscaré dónde tengo el error en mi tabla y datos. Muchas gracias nuevamente. Avisaré si encuentro el problema.

Prueba a hacer la consulta de no coincidentes. Así seguro que te funciona aunque necesitas tener una consulta más en tu BD...

Muchas Gracias Sveinbjorn, estás en lo cierto son los campos vacíos los que generan el error en la consulta 2,  la opción de No coincidentes ya la había probado y no me funcionaba quizás también por los campos vacíos.

Saludos

Eduardo

Pues damos por resuelto el problema. Cualquier cosa, me comentas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas