En los programas contables y administrativos es muy común que se requiera sacar un resumen de saldos agrupados según su antigüedad.
Les dejo este código sencillo pero efectivo:
Partimos de una tabla FACTURAS con la siguiente estructura:
SUCURSAL: cHAR(3)
PROGRAMADO: DATE
PAGADO:INTEGER
IMPORTE: NUMERIC(10,2)
.
.
CAMPOS ADICIONALES
.
.
EL campo sucursal puede ser cualquier tipo que les sirva para diferenciar en este caso las facturas por sucursal, pero puede ser por cualquier otro o bien quitarlo sin problemas. El campo "programado" es la fecha programada de pago de la factura. EL campo "pagado" indica si la factura ya fue pagada o está pendiente (1 o 0).
EL Query queda así:
Código SQL
[-]
SELECT SUCURSAL,
SUM( IF( ISNULL(PROGRAMADO) OR ( DATEDIFF( CURDATE(), PROGRAMADO )<=0 AND PROGRAMADO<>'0000-00-00') , IMPORTE, 0 )) AS FINANCIADO,
SUM(IMPORTE) AS TOTAL,
SUM( IF( DATEDIFF( CURDATE(), PROGRAMADO )>=1 AND DATEDIFF( CURDATE(), PROGRAMADO)<=8 ,IMPORTE,0)) AS TOT_8dias,
SUM( IF( DATEDIFF( CURDATE(), PROGRAMADO )>=9 AND DATEDIFF( CURDATE(), PROGRAMADO)<=15 ,IMPORTE,0)) AS TOT_15dias,
SUM( IF( DATEDIFF( CURDATE(), PROGRAMADO )>=16 AND DATEDIFF( CURDATE(), PROGRAMADO)<=30 ,IMPORTE,0)) AS TOT_30dias,
SUM( IF( DATEDIFF( CURDATE(), PROGRAMADO )>=31 AND DATEDIFF( CURDATE(), PROGRAMADO)<=60 ,IMPORTE,0)) AS TOT_60dias,
SUM( IF( DATEDIFF( CURDATE(), PROGRAMADO )>=61 AND DATEDIFF( CURDATE(), PROGRAMADO)<=90 ,IMPORTE,0)) AS TOT_90dias,
SUM( IF( DATEDIFF( CURDATE(), PROGRAMADO )>=91 ,IMPORTE,0)) AS TOT_mas90dias,
FROM FACTURAS
WHERE PAGADO<>1
GROUP BY SUCURSAL
Se puede adecuar a lo que necesiten inclusive modificar los rangos como requieran ya que la lógica es la misma.
Combinado con su reporteador de preferencia se obtiene algo asi:
O ya más sofisticado:
Ojalá y les sirva