Ver Mensaje Individual
  #8 (permalink)  
Antiguo 13/01/2016, 14:49
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Restar campos de diferentes tablas por fechas

Genial.
Ahora veamos si se entiende la lógica que te propongo, y también si se entiende.

Tablas:
Código MySQL:
Ver original
  1. mysql> DROP TABLE IF EXISTS cajamonto;
  2. Query OK, 0 rows affected (0.07 sec)
  3.  
  4. mysql> DROP TABLE IF EXISTS cajachica;
  5. Query OK, 0 rows affected (0.03 sec)
  6.  
  7. mysql> CREATE TABLE IF NOT EXISTS `cajamonto` (
  8.     ->   `id` INT(11) NOT NULL AUTO_INCREMENT,
  9.     ->   `monto` DECIMAL(7,2) DEFAULT NULL,
  10.     ->   PRIMARY KEY (`id`)
  11.     -> ) ENGINE=INNODB DEFAULT CHARSET=UTF8;
  12. Query OK, 0 rows affected (0.07 sec)
  13.  
  14. mysql>
  15. mysql> CREATE TABLE IF NOT EXISTS  `cajachica` (
  16.     ->   `id` INT(11) NOT NULL AUTO_INCREMENT,
  17.     ->   `importe` DECIMAL(14,2) DEFAULT NULL,
  18.     ->   `descripcion` VARCHAR(255) DEFAULT NULL,
  19.     ->   PRIMARY KEY (`id`)
  20.     -> ) ENGINE=INNODB DEFAULT CHARSET=UTF8;
  21. Query OK, 0 rows affected (0.06 sec)

Datos imaginarios:
Código MySQL:
Ver original
  1. mysql> INSERT INTO cajamonto(monto, fecha)
  2.     -> VALUES (800, '2016-01-10'), (660, '2016-01-15'), (365, '2016-02-18'), (524, '2016-02-21'),
  3.     ->  (330, '2016-03-10'), (123, '2016-03-15'), (450, '2016-04-18'), (500, '2016-04-21');
  4. Query OK, 8 rows affected (0.03 sec)
  5. Records: 8  Duplicates: 0  Warnings: 0
  6.  
  7. mysql>
  8. mysql> INSERT INTO cajachica(importe, fecha)
  9.     -> VALUES (250, '2016-01-10'), (300, '2016-01-15'), (121, '2016-02-18'), (320, '2016-02-21'),
  10.     ->  (320, '2016-03-10'), (200, '2016-03-15'), (150, '2016-04-18'), (190, '2016-04-21');
  11. Query OK, 8 rows affected (0.02 sec)
  12. Records: 8  Duplicates: 0  Warnings: 0

Consulta:
Código MySQL:
Ver original
  1. mysql> SELECT
  2.     ->     ing.Mes, ing.Anio, Ingresos, Gastos, (ingresos - gastos) saldo
  3.     -> FROM
  4.     ->     (SELECT
  5.     ->         MONTH(fecha) mes, YEAR(fecha) anio, SUM(monto) ingresos
  6.     ->     FROM
  7.     ->         cajamonto
  8.     ->     GROUP BY MONTH(fecha) , YEAR(fecha)) ING
  9.     ->         INNER JOIN
  10.     ->     (SELECT
  11.     ->         MONTH(fecha) mes, YEAR(fecha) anio, SUM(importe) gastos
  12.     ->     FROM
  13.     ->         cajachica
  14.     ->     GROUP BY MONTH(fecha) , YEAR(fecha)) GTS ON ing.mes = gts.mes
  15.     ->         AND ing.anio = gts.anio
  16.     -> ORDER BY 2, 1;
  17. +------+------+----------+--------+--------+
  18. | Mes  | Anio | Ingresos | Gastos | saldo  |
  19. +------+------+----------+--------+--------+
  20. |    1 | 2016 |  1460.00 | 550.00 | 910.00 |
  21. |    2 | 2016 |   889.00 | 441.00 | 448.00 |
  22. |    3 | 2016 |   453.00 | 520.00 | -67.00 |
  23. |    4 | 2016 |   950.00 | 340.00 | 610.00 |
  24. +------+------+----------+--------+--------+
  25. 4 rows in set (0.00 sec)

¿Estamos más cerca?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)