Jump to content

Consulta SQL - Clientes que hace tiempo que no compran


Javier Campos

Recommended Posts

Muy buenas,

 

Estoy intentando crear una consulta SQL que me devuelva un listado de emails con los clientes que no compran desde una fecha determinada.

 

Creo que el campo clave es "date_upd" de la tabla "customers" o de la tabla "orders" (no estoy seguro).

De momento voy por aquí, pero consigo dar con la tecla.

SELECT CONCAT_WS( ' ', g.email ) FROM `ps_orders` o LEFT JOIN `ps_customer` g ON g.`id_customer` = o.`id_customer` LEFT JOIN `ps_order_detail` n ON n.`id_order` = o.`id_order` WHERE o.date_upd < '2017-09-13' AND o.date_upd > '2017-09-15'

Esa consulta deberia devolverme los emails de los pedidos del día 14, pero me devuelve un listado vacío.

 

¿Alguna idea de donde me falla la consulta?

 

Link to comment
Share on other sites

Hola Javier Campos, 

 

Sin entrar en detalle de la consulta, te puedo adelantar que los campos mayor-menor y menor-mayor los tienes cruzados.

WHERE o.date_upd < '2017-09-13' AND o.date_upd > '2017-09-15'

 

Debería ser justo al contrario:
WHERE o.date_upd > '2017-09-13' AND o.date_upd < '2017-09-15'

 

El resto de la consulta no la he testeado, entiendo que estará bien.

Si no te devuelve lo que esperas, me dices.

 

Un saludo!

  • Thanks 1
Link to comment
Share on other sites

Corregido ese detalle, del que no me había dado cuenta, me sigue devolviendo un listado vacío.

SELECT CONCAT_WS( ' ', g.email ) FROM `ps_orders` o LEFT JOIN `ps_customer` g ON g.`id_customer` = o.`id_customer` LEFT JOIN `ps_order_detail` n ON n.`id_order` = o.`id_order` WHERE o.date_upd > '2017-09-13' AND o.date_upd < '2017-09-15'
 
Link to comment
Share on other sites

Ahí va la consulta funcionando en mi tienda correctamente.

 

SELECT o.id_order, o.id_customer, o.date_upd, c.firstname, c.lastname, c.email FROM ps_orders o
INNER JOIN ps_customer c
ON o. id_customer = c. id_customer
INNER JOIN ps_order_detail od
ON o. id_order = od. id_order
WHERE o.date_upd > '2017-09-13 ' AND o.date_upd <  '2017-09-15 ' 
 
Luego en el select ya muestras tu los campos que quieras, yo he puesto unos cuantos a modo demo.
Por cierto, en la captura las fechas son otras ya que yo no tengo registros en mi tienda demo en las fechas que tu pides y quise dejarte la consulta hecha para tu site.

post-1393435-0-35241500-1505994327_thumb.png

Edited by Luisejo (see edit history)
  • Like 1
Link to comment
Share on other sites

Muchas gracias por el aporte Luisejo. Voy a probarla ahora mismo.

 

No obstante, sigue sin ser lo que quiero. Me explico: Ese me devolvería la lista de clientes cuya ultima entrada a la web esté entre las fechas establecidas en la consulta SQL, pero no los clientes que hace tiempo que no compran en la tienda. Lo que ocurre es que el SQL inicial que yo puse fue la manera en la que se me ocurrió resolverle el problema.

 

¿Alguna idea más de como sacar el listado de clientes que no compran desde hace un determinado tiempo?

Link to comment
Share on other sites

Hola Javier Campos, realmente esta consulta lo que devuelve son una serie de campos basándonos en pedidos comprendidos entre fechas, pensaba que era eso lo que querías.

Si lo que quieres es saber que clientes no compran desde la fecha x, la consultaría quedaría así.

Ten en cuenta que la tendrás que ejecutar directamente en un gestor SQL, en el Back-Office salta error.

 

SELECT c1.firstname,c1.lastname,c1.email

FROM ps_customer c1

WHERE c1.email NOT IN (

    SELECT c.email FROM ps_orders o

    INNER JOIN ps_customer c

    ON o. id_customer = c. id_customer

    INNER JOIN ps_order_detail od

    ON o. id_order = od. id_order

    WHERE o.date_upd < '2017-07-09 '

)

 

 

Muchas gracias por el aporte Luisejo. Voy a probarla ahora mismo.

 

No obstante, sigue sin ser lo que quiero. Me explico: Ese me devolvería la lista de clientes cuya ultima entrada a la web esté entre las fechas establecidas en la consulta SQL, pero no los clientes que hace tiempo que no compran en la tienda. Lo que ocurre es que el SQL inicial que yo puse fue la manera en la que se me ocurrió resolverle el problema.

 

¿Alguna idea más de como sacar el listado de clientes que no compran desde hace un determinado tiempo?

 

Edited by Luisejo (see edit history)
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...