Calcular Saldos de Cta.Cte. en MySQL

1,702 views
Skip to first unread message

Arnaldo Toledano

unread,
May 3, 2013, 10:38:36 AM5/3/13
to publice...@googlegroups.com
Gente.
Recuerdo que hace un tiempo se trato en el foro la manera de lograr el SALDO de una cuenta corriente a partir de un DEBE y un HABER realizando
un SELECT.
Si alguien recuerda el asunto o algo por el estilo se lo voy a agradecer.
Yo no encuentro nada del tema.


Gracias
--
Arnaldo Toledano
Tesys Informática
Córdoba
Argentina

Marcos Godoy

unread,
May 3, 2013, 10:57:13 AM5/3/13
to publice...@googlegroups.com


  select cuenta,sum( debe - haber) as saldo from tabla group by cuenta

Arnaldo Toledano

unread,
May 3, 2013, 11:10:24 AM5/3/13
to publice...@googlegroups.com
Mi problema es que tengo TIPO de COMPROBANTE
Por lo que tengo que poner un IF el SUM.
Estoy investigando el IF en MySQL


gracias Marcos


Arnaldo Toledano

Carlos Miguel FARIAS

unread,
May 3, 2013, 12:19:17 PM5/3/13
to Grupo Fox
IF de MySQL es esquivalente al IIF de vfp.
Si el sistema esta diseñado con una columna para el debe y otra para el haber. Deberia Haberse buscado un mejor diseño de base de datos.
Una cuenta en una misma transaccion no puede ser positiva y negativa.
Entonces con una sola columna donde los debitos son positivos y los creditos (haber) son negativos, un simple sum te saca el saldo de la cuenta.
No aplican la navaja de Occam, la solución mas simple es la mejor.
Saludos: Miguel, La Pampa (RA)

Arnaldo Toledano

unread,
May 3, 2013, 12:46:30 PM5/3/13
to publice...@googlegroups.com
Tampoco es para que me mates así Miguel, no podes juzgar así mis "pecados" de juventud, jajaja...
Vengo de la vieja escuela donde el espacio en disco era MUY IMPORTANTE.
En realidad los montos son POSITIVOS en todos los casos, tengo un campo que es tipo de comprobante que me determina si es debe o haber.
Tengo todo solucionado con la obtención de un cursor y a continuación los "procesos".
Me refiero al caso de mostrar los movimientos de una cuenta corriente.

A través de un SELECT directo al MySQL no  he encontrado una solución aun.
1.- Si coloco el siguiente código
 Select *, sum(if(ctatipcom = 'F',CtaMonCom,0)) - If(ctatipcom='R',Ctamoncom,0)) as saldo  from stpctacte where ctacodcop=XXXX
Logro un solo registro con el SALDO ACTUAL del Cliente.
2.- Si le agrego la clausula Group By Por Numero de comprobante, por fecha, por lo que sea, en la COLUMNA SALDO obtengo solo
    un numero que refleja "ESA" fila, no es acumulativo a la fila siguiente.

Gracias Miguel, pero si seguís así, me encargare que no pase ni agua y menos vino desde Mza a la Pampa.


Arnaldo Toledano

mpulla

unread,
May 3, 2013, 1:09:11 PM5/3/13
to publice...@googlegroups.com, arnaldo....@gmail.com
Hola Tesys.

Como dice Miguel, puedes mejorar tu diseño, en mi caso además de Debe y Habe,r tengo una columna donde tengo el valor positivo o negativo y con un sum ya tengo lo que necesito.

Mira este enlace
http://stackoverflow.com/questions/664700/calculate-a-running-total-in-mysql

Saludos.
Mauricio

Víctor Hugo Espínola Domínguez

unread,
May 3, 2013, 3:45:05 PM5/3/13
to publicesvfoxpro
Hola Arnaldo

>Select *, sum(if(ctatipcom = 'F',CtaMonCom,0)) - If(ctatipcom='R',Ctamoncom,0)) as saldo  from stpctacte where >ctacodcop=XXXX 

Se puede expresar así:
Select *, sum(if(ctatipcom = 'F', 1, -1 ) * CtaMonCom) as saldo  from stpctacte where ctacodcop=XXXX 

Los siguientes enlaces muestran como calcular saldos al vuelo, pero debes tener en cuenta que ese tipo de consultas consume muchos recursos del servidor porque por cada fila se efectúan subconsultas desde las filas anteriores hasta la actual. Es más eficiente traer los datos a un cursor de Visual Foxpro y procesar dicho cursor.



Saludos,
Víctor.


Arnaldo Toledano

unread,
May 3, 2013, 3:52:01 PM5/3/13
to publice...@googlegroups.com
Gracias Victor.

Sigo como lo estoy haciendo ahora.
Con un cursor y después el proceso.


Arnaldo Toledano

El 03/05/2013 04:45 p.m., Víctor Hugo Espínola Domínguez escribió:
Select *, sum(if(ctatipcom = 'F', 1, -1 ) * CtaMonCom) as saldo  from stpctacte where ctacodcop=XXXX 

Carlos Miguel FARIAS

unread,
May 4, 2013, 10:32:14 AM5/4/13
to Grupo Fox
Arnaldo:  Si no dejas pasar el agua, te demando, si no dejas pasar el vino, te invadimos y te torturamos hasta que digas donde metieron las mendocinas feas (si es que quedo alguna) y si no tienen, los proveemos. (He ido varias veces a Mendoza y no he visto mendocinas feas (;-D

No se de que escuela vieja vendrás vos, empecé con S/34 con 128 kilobytes de memoria y 128 MB en disco y PC con 180kb en disco (antes que la PC de IBM).
Fijate que tu solución (un campo, todos positivos + campo para indicar débitos y créditos), no difiere mucho de la que digo yo, un campo donde el signo define débitos o créditos. (ahorra más disco) y simplifica el calculo de saldo.
Según las malas lenguas contables, la partida doble (una columna para débitos y otra para créditos) empezó siendo simple (una columna con signo). Pero cuando Luquitas la invento (siglo XIII/XIV), apenas si los comerciantes sabían sumar (lejos de suma algebraica), de ahí que quedo doble.

Los contadores con dominio matemático como yo, le damos al vino para verla doble (;-D
Y ya se que no es viernes, pero ayer a la tarde no tuve tiempo para ver correo a la tarde.

Saludos: Miguel, La Pampa (RA) Demandando agua o vamos por el vino.

Arnaldo Toledano

unread,
May 4, 2013, 12:05:45 PM5/4/13
to publice...@googlegroups.com
Así somos los Mendocinos, tenemos chicas lindas nada mas,pero...  me tuve que venir a Córdoba porque las chicas feas nunca supe donde las escondían...

Yo empece con las Apple, dos disketeras de 160 K cada una, sistema operativo CPM.
La memoria Ram creo que era de 64 K.
Me recibí haciendo un sistema de sueldos en Basic......., ha pasado tanto tiempo....! ! ! !
Si, tenes razón, después que te envié el mail, me di cuenta, había interpretado una columna para debe, otra para el haber.

Yo también anduve por las Ciencia Económicas, deje en 3 año de una carrera de 5, y recuerdo el GRAN INVENTO de Fray Luca Paccioli, inventor de la partida doble
"No hay Deudor sin acreedor ni acreedor sin deudor."
Pero los contadores le agregaron tanta FILOSOFÍA a la contabilidad que hoy por hoy la complican, supongo yo para cobrar mejores HONORARIOS.

Un abrazo Miguel y con tanta amenazas, no hay problemas, seguimos enviando vino, digo AGUA.


Arnaldo Toledano

Carlos Miguel FARIAS

unread,
May 4, 2013, 6:15:30 PM5/4/13
to Grupo Fox

Sos responsable de una invasión. Que podría haber sido una simple amenaza.
Alce os una copa de vino, no muy llena par que no se vuelque

Ramón Castro

unread,
Apr 16, 2020, 7:36:24 AM4/16/20
to Comunidad de Visual Foxpro en Español
Hola, 

Y en lugar de mostrar el resultado en consulta, ¿cómo podría tenerlo como una columna más de la tabla?


El viernes, 3 de mayo de 2013, 16:57:13 (UTC+2), Marcos Godoy escribió:


  select cuenta,sum( debe - haber) as saldo from tabla group by cuenta
Reply all
Reply to author
Forward
0 new messages