Comunidad de diseño web y desarrollo en internet online

Consulta SQL de transacciones financieras

Citar            
MensajeEscrito el 22 May 2011 02:11 am
Saludos,

Estoy desarrollando un sistema que, por ejemplo, contiene una tabla llamada transacciones, en la cual se registraran los creditos y los debitos (depositos y retiros). Mi intencion es realizar una consulta donde me despliegue cada transaccion y me presente el balance actual. pe.:

Deposito Retiro Balance
500 0 500
1000 0 1500
0 600 900
0 300 600

no se si es conveniente tener una sola tabla llamada transaccion o realizar dos tablas, una con los credito y otra con lo debitos. Agradecere la ayuda que me puedan dar.

Por Roque

5 de clabLevel



 

msie8
Citar            
MensajeEscrito el 22 May 2011 08:00 pm
Una sola tabla es lo adecuado.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 23 May 2011 02:49 am
Y como debo resolver lo de la consulta para mostrar cada transaccion y me vaya mostrando el balance que queda en cada transaccion.

Por Roque

5 de clabLevel



 

msie
Citar            
MensajeEscrito el 23 May 2011 10:08 am
La tabla de transaccion deberia ser algo asi:

transaction_id (PK)
client_id(FK)
transaction_type_id(FK)
amount
transaction_date
balance

donde client_id proviene de la tabla "clients" y transaction_type_id de la table "transaction_type". En esta tabla indicas si fue deposito o retiro. Si fuesen 2 tipos de transacciones solo usaria un tinyint, si hubieran mas tipos si usaria una tabla.

Por edge

57 de clabLevel



Genero:Masculino  

Software developer

chrome
Citar            
MensajeEscrito el 23 May 2011 12:29 pm
edge:
Si amount tiene signo, no es necesario especificar si es retiro o depósito. Con hacer la suma algebraica ya está.

Roque:
Mi propuesta iría así. La tabla de transacciones sería:
- Fecha
- retiros
- depósitos
- saldo
- descripción
(resto de los campos).

Fecha es la fecha y hora de la transacción, retiro, depósito y saldo son campos tipo float (o double o currency o lo que te parezca adecuado) y descripción será el campo donde poner la descripción del movimiento en la cuenta.

La clave está cuando haces la inserción de un registro nuevo. Primero tienes que leer el saldo del movimiento anterior.

SELECT saldo FROM transacciones ORDER BY fecha DESC LIMIT 1;

Eso lee el último movimiento según la fecha.

Para saber el saldo actual se aplica la fórmula:

saldo_actual = saldo_anterior + deposito - retiro

Si es un deposito, retiro lo pones en cero, si es un retiro, al contrario. Luego sí, haces el insert en la tabla.

Así, siempre que uses el SELECT de más arriba siempre tendrás el saldo actual.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 23 May 2011 12:33 pm
Si es solo retiro o deposito, me parece genial. Sin embargo en la vida real hay mas alla de depositos y retiros. Aparte, a la hora de hacer un query seria bien ortodoxo a mi parecer el de traerte los negativos para ver si fueron retiros o positivos si fueron depositos, si puedes hacer el filtro con solo indicarle que tipo de transaccion se ejecuto.

Por edge

57 de clabLevel



Genero:Masculino  

Software developer

chrome
Citar            
MensajeEscrito el 23 May 2011 01:06 pm
Quise decir que no necesitas el tipo de transacción para hacer el cálculo del saldo o balance. Tal vez para otras cosas sí, como bien dices.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 24 May 2011 11:51 pm
Muchas gracias por el interes de ayudarme, quizas no me he explicado bien. yo tengo los siguientes campos en la tabla transaccion, ID, tipo_transaccion, referencia, deposito y retiro. pero yo quiero hacer una consulta que me vaya mostrando el balance al lado de cada transaccion. Por ejemplo:


ID Tipo_Transaccion Referencia Deposito Retiro Balance
1 D Deposito 1,500.00 0 1,500.00
2 D Deposito 3,000.00 0 4,500.00
3 R Retiro 1,200.00 0 3,300.00

Aclaro, el campo balance no lo estoy almacenando, solo realizar el calculo. Gracias.

Por Roque

5 de clabLevel



 

msie8
Citar            
MensajeEscrito el 25 May 2011 02:14 pm
Pues realizando el cálculo, ¿cómo más?... No entiendo tu pregunta.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 25 May 2011 02:47 pm
Busca en google "Cumulative sum" o "Cumulative total".

Por edge

57 de clabLevel



Genero:Masculino  

Software developer

chrome
Citar            
MensajeEscrito el 26 May 2011 12:44 am
Gracias por tu orientacion, ya encontre lo que necesitaba, tu repuesta iba por via que necesitaba para solucionar.

Mil gracias.

mysql> select id, tipo, referencia, deposito, retiro, (@sum:=@sum+deposito-retir
o) as Total
-> from transaccion
-> join(select @sum:=0)y
-> order by id;
+----+------+------------+----------+--------+-------+
| id | tipo | referencia | deposito | retiro | Total |
+----+------+------------+----------+--------+-------+
| 6 | D | DEPOSITO | 1500 | 0 | 1500 |
| 7 | D | DEPOSITO | 3200 | 0 | 4700 |
| 8 | R | RETIRO | 0 | 1650 | 3050 |
| 9 | R | RETIRO | 0 | 1800 | 1250 |
| 10 | D | DEPOSITO | 6400 | 0 | 7650 |
+----+------+------------+----------+--------+-------+
5 rows in set (0.05 sec
Lo que queria hacer era esto.

Por Roque

5 de clabLevel



 

msie8

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.