Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

[SOLUCIONADO] Consulta MYSQL con SUM condicional entre fechas

Estas en el tema de Consulta MYSQL con SUM condicional entre fechas en el foro de Bases de Datos General en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 19/07/2018, 01:26
 
Fecha de Ingreso: octubre-2008
Mensajes: 147
Antigüedad: 16 años, 1 mes
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?
  #2 (permalink)  
Antiguo 19/07/2018, 08:10
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Consulta MYSQL con SUM condicional entre fechas

Asi no se hace un case con sum, seria algo como esto:


Código MySQL:
Ver original
  1. case WHEN datediff('2018-07-19', `T`.`Fecha`) <= 30 then sum(campo) end as sumatoria1
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: condicional, count, mysql, select, sum
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:22.