Ver Mensaje Individual
  #1 (permalink)  
Antiguo 19/07/2018, 01:26
dfmex
 
Fecha de Ingreso: octubre-2008
Mensajes: 147
Antigüedad: 15 años, 6 meses
Puntos: 3
Pregunta Consulta MYSQL con SUM condicional entre fechas

Hola amigos;

Necesito un empujoncito con una consulta que necesito hacer, y que no doy con una...

Tengo una tabla llamada TALONES, y la tabla tiene registros de diferentes talones (notas/facturas de compras) de clientes.

Yo necesito saber solo con consultas a MySQL agrupados por cliente el total de las compras hechas por cada cliente en menos de 30 dias, de 31 a 60 dias, de 61 a 90 dias y de más de 90 días.

Mi consulta actual es:

Código SQL:
Ver original
  1. SELECT
  2.         CONCAT('$', FORMAT(SUM(`T`.`Total`), 2)) AS 'Total',      
  3.         COUNT(`T`.`Folio`) AS 'TotFolios',
  4.         `T`.`ClienteFiscal`,
  5.         CONCAT(IFNULL(`C`.`RazonSocial`, ''), IFNULL(CONCAT(`C`.`Nombre`, ' ', `C`.`APaterno`, ' ', `C`.`AMaterno`), '') ) AS `NombreCL`
  6.         FROM `Talones` AS `T`
  7.         JOIN `Clientes` AS `C` ON `T`.`ClienteFiscal` = `C`.`ClienteID`
  8.         WHERE `T`.`Estado` != 0 GROUP BY `T`.`ClienteFiscal`  
  9.         ORDER BY `NombreCL`  ASC

Y esto me arroja la información que necesito pero en la sumatoria me da el total global, y necesito discriminar los rangos para tener 5 totales al final, total30, total60, total90 y total90mas y totalglobal

La tabla TALONES por su puesto tiene un campo del tipo timestamp con el formato YYYU-MM-DD HH:MM:SS (2018-07-19 02:27:00 por ejemplo).

He intentado lo sigiente:

Código SQL:
Ver original
  1. SELECT
  2.         CONCAT('$', FORMAT(SUM(`T`.`Total`), 2)) AS 'Total',
  3.        
  4.         SUM(CASE WHEN datediff('2018-07-19', `T`.`Fecha`) <= 30) AS 'Total30',
  5. SUM(CASE WHEN datediff('2018-07-19', `T`.`Fecha`) > 30 AND datediff('2018-07-19', `T`.`Fecha`) <= 60) AS 'Total60',
  6. SUM(CASE WHEN datediff('2018-07-19', `T`.`Fecha`) > 60 AND datediff('2018-07-19', `T`.`Fecha`) <= 90) AS 'Total90',
  7. SUM(CASE WHEN datediff('2018-07-19', `T`.`Fecha`) > 90) AS 'Total90mas'
  8.      
  9.         COUNT(`T`.`Folio`) AS 'TotFolios',
  10.         `T`.`ClienteFiscal`,
  11.         CONCAT(IFNULL(`C`.`RazonSocial`, ''), IFNULL(CONCAT(`C`.`Nombre`, ' ', `C`.`APaterno`, ' ', `C`.`AMaterno`), '') ) AS `NombreCL`
  12.         FROM `Talones` AS `T`
  13.         JOIN `Clientes` AS `C` ON `T`.`ClienteFiscal` = `C`.`ClienteID`
  14.         WHERE `T`.`Estado` != 0 GROUP BY `T`.`ClienteFiscal`  
  15.         ORDER BY `NombreCL`  ASC

Pero obviamente me da errores:

Cita:
MySQL ha dicho: Documentación

#1064 - Algo está equivocado en su sintax cerca ') as 'Total30',
SUM(CASE WHEN datediff('2018-07-19', `T`.`Fecha`) > 30 AND date' en la linea 4

Alguien podría ayudarme a conocer cómo puedo hacer mi consulta?