Javier Campos Posted September 21, 2017 Share Posted September 21, 2017 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 More sharing options...
Luisejo Posted September 21, 2017 Share Posted September 21, 2017 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! 1 Link to comment Share on other sites More sharing options...
Javier Campos Posted September 21, 2017 Author Share Posted September 21, 2017 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 More sharing options...
Luisejo Posted September 21, 2017 Share Posted September 21, 2017 (edited) 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. Edited September 21, 2017 by Luisejo (see edit history) 1 Link to comment Share on other sites More sharing options...
Javier Campos Posted September 22, 2017 Author Share Posted September 22, 2017 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 More sharing options...
Luisejo Posted September 22, 2017 Share Posted September 22, 2017 (edited) 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 September 22, 2017 by Luisejo (see edit history) Link to comment Share on other sites More sharing options...
Javier Campos Posted September 22, 2017 Author Share Posted September 22, 2017 (edited) Umm pero no me funciona. He probado poniendo la fecha del 2016-12-31 y me devuelve emails de clientes que me han comprado hace 2 días. Actualización: Comprobado. Me esté metiendo los emails de pedidos que han entrado tambien en fechas posteriores Edited September 22, 2017 by Javier Campos (see edit history) Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now