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

consultas con sumas

Estas en el tema de consultas con sumas en el foro de Mysql en Foros del Web. SELECT Id, Concepto, sum(Importe) as suma, GROUP_CONCAT(Mes) FROM Movimientos group by Id ORDER BY Id + 0 Asc; Tengo esta cosulta, efectua sumas de los ...
  #1 (permalink)  
Antiguo 02/07/2009, 15:10
 
Fecha de Ingreso: mayo-2008
Mensajes: 181
Antigüedad: 15 años, 9 meses
Puntos: 0
Pregunta consultas con sumas

SELECT Id, Concepto, sum(Importe) as suma, GROUP_CONCAT(Mes) FROM Movimientos group by Id ORDER BY Id + 0 Asc;

Tengo esta cosulta, efectua sumas de los totales y luego tambien pone en una sola linea los meses que se han efectuado ingreso, pero me gustaria hacer diferencias.

Por ejemplo aplicar esta misma consulta pero que me de los meses del 2008 detallados y sumados, en otra linea la suma de los ingresos de 2009.

En el campo del mes esta puesto ene 08, feb 08, mar 08, abril 08,etc...

O por ejemplo ene 09,feb 09,mar 09
  #2 (permalink)  
Antiguo 03/07/2009, 05:49
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 1 mes
Puntos: 360
Respuesta: consultas con sumas

No te expicas mucho, pero mira el comportamiento de el ordenamiento con rollup
Es posible realizar sumas por mes y año al mismo tiempo.

Nos cuentas como te va.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 08/07/2009, 12:58
 
Fecha de Ingreso: mayo-2008
Mensajes: 181
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: consultas con sumas

A ver si me explico bien:

tengo una tabla que pone Id, Fecha Contable, Fecha Valor, Concepto, Importe, Saldo y mes.

Por ejemplo 51,01/01/2008,02/01/2008, pedro lopez,20,3500,enero09
51,02/03/2008,03/03/2008, pedro lopez,30,4500,marzo09

Mi idea es sacar un listado de los meses que ha ingresado 51, el importe y los meses que ha ingresado.

He intentado con esta consulta pero no me salen todos los ids, solo me salen algunos.
SELECT Id, SUM(Importe) from Movimientos group by Mes with ROLLUP;

La idea es que me salga
51, 50 euros, enero09,marzo09
51, 60 euros, febrero08,abril08
51, 40 euros,marzo07,abril07
52,150 euros,enero09,jun09
53,200 euros,marzo06,jun06

Si me saliera ordenador por años seria la leche...
  #4 (permalink)  
Antiguo 08/07/2009, 15:07
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: consultas con sumas

Primer problema:
02/01/2008
imagino que estás usando un campo varchar para la fecha con un orden inadecuado. Lo suyo sería crear un nuevo campo tipo date e ingresar esas fechas en el formato de fecha 2008/01/02
Naturalmente, no tienes que teclear nada. Creas el campo y lo llamas por ejemplo fecha_Contable2 y haces el siguiente update
UPDATE nombretabla SET fecha_Contable2 = str_to_date(fecha_Contable, '%d/%m/%Y')

y verás que ya tienes los datos como fecha. Luego haces algo parecido con fecha_Valor, tras crear un fecha_Valor2.
Cuando tengas eso comprobado, podrás eliminar los campos fecha_Contable y fecha_Valor y renombrar los campos fecha_Contable2 a fecha_Contable, y fecha_Valor2 a fecha_Valor. Ya tendremos los datos como queremos, y no te preocupes que luego podremos sacar esos datos como quieres, que según pienso es agrupar por id y año y sacar los meses mediante ese group_concat o con el with rollup. Lo sacaremos como número los meses o en inglés, o usaremos algún truco para ponerlo en español, pero eso no debe preocuparte. También podremos ordenar por año y luego por id. Pero primero comprueba lo del campo fecha_Contable y fecha_Valor. ¿Cómo lo tienes?
  #5 (permalink)  
Antiguo 09/07/2009, 03:59
 
Fecha de Ingreso: mayo-2008
Mensajes: 181
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: consultas con sumas

Habia pensado en añadir un campo que sea el año

id,fecha contable,fecha valor,concepto, importe,saldo,mes,año

¿Creo que seria mas rapido asi? la fecha esta puesta dd/mm/aaaa

¿Que te parece?

Gracias
  #6 (permalink)  
Antiguo 09/07/2009, 04:43
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: consultas con sumas

El año lo recuperarás de la fecha: no tienes por qué añadirlo. Pero la fecha debe ser un campo date con el orden aaaa/mm/dd. Luego lo podrás mostrar con ese otro orden, pero debes almacenarla como te estoy aconsejando, en un campo date y con el orden aaaa/mm/dd. Como te dije, puedes añadir dos campos para trasladar los datos desde esos campos fecha que tienes ahora.
  #7 (permalink)  
Antiguo 09/07/2009, 15:24
 
Fecha de Ingreso: mayo-2008
Mensajes: 181
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: consultas con sumas

¿Porque no puedo almacenarlo en este formato dd/mm/aaaa?

¿Como lo añado o modifico ese campo de esa tabla?
  #8 (permalink)  
Antiguo 09/07/2009, 15:37
Avatar de 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, 4 meses
Puntos: 2658
Respuesta: consultas con sumas

Porque ese no es el formato estándar de almacenamiento en la bases de datos.
Los DBMS almacenan las fechas como flotantes y las interpretan en base a un esquema de representación estandarizado desde hace años (yyyyMMddHHmmss). Este formato permite ordenamientos mucho más simples que los que obtendrías con el otro, ya que solamente debe hacerlo por su valor numerico para obtener los resultados correctos. El formato ddMMyyyy, por su parte, requiere descomposición y análisis por segmentos para realizar la misma tarea.
El problema aquí es que estás confundiendo almacenamiento con representación. ALmacenar almacenas en el estandar yyyyMMdd, pero representar, lo representas de cualquier forma.
Por otro lado, usar un campos separado para el año es innecesario, por cuando el año lo obtienes simplemente de hacer YEAR(campofecha)....
Por eso es que te están diciendo que no necesitas guardarlo por separado.

El agregar un campo a una tabla es usar simplemente la sentencia
Código sql:
Ver original
  1. ALTER TABLE tabla ADD COLUMN nombreDeCampo DATE NOT NULL;
y la que te están dando sirve para convertir el dato ya existente en un campo en un valor DATE y almacenarlo en el otro.
Luego de eso, simplemente eliminas el campo original y listo, ya tienes el dato reformateado y bien útil.

Debes tener en cuenta siempre que, a pesar de que te parezca extraña la forma de almacenar los datos, los DBMS han evolucionado desde hace mucho y si usan esos métodos es porque son los más eficientes para el manejo de datos. Piensa que solamente en transacciones bancarias, la eficiencia de los datos es crítica, y ellos los usan también de ese modo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 09/07/2009, 15:44
 
Fecha de Ingreso: mayo-2008
Mensajes: 181
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: consultas con sumas

Ok gracias por la explicacion, ya he ejecutado la sentencia que me has dado:

ALTER TABLE Movimientos ADD COLUMN fecha DATE NOT NULL;

¿Ahora que hago?

Muchas gracias
  #10 (permalink)  
Antiguo 09/07/2009, 17:39
Avatar de 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, 4 meses
Puntos: 2658
Respuesta: consultas con sumas

Hay que actualizar los datos de esa columna, con la sentencia que te indicó jurena:
Código sql:
Ver original
  1. UPDATE nombretabla SET fecha_Contable2 = str_to_date(fecha_Contable, '%d/%m/%Y')
La función STR_TO_DATE() recibe una cadena de texto y devuelve un DATE. De esa forma las fechas ingresadas como strings en el campo que usas las pones en el campo agregado.
Luego puedes recurrir a tu propia sentencia:
Código sql:
Ver original
  1. SELECT
  2.     Concepto,
  3.     SUM(Importe) AS suma,
  4.     GROUP_CONCAT(Mes) Meses,
  5.     YEAR(fecha) FechaLista
  6. FROM Movimientos
  7. GROUP BY FechaLista;
Debes tener en cuenta que hay ciertos datos que "desaparecen" de la lista porque carecen de significado en un agrupamiento. Ese es el caso del ID de una tabla. Cuando realizas un agrupamiento sólo queda el primer valor de un conjunto como ese.
Solamente si lo usas en alguna función tendría alguna utilidad:

Código sql:
Ver original
  1. SELECT
  2.     COUNT(id) CantRegistros,
  3.     Concepto,
  4.     SUM(Importe) AS suma,
  5.     GROUP_CONCAT(Mes) Meses,
  6.     YEAR(fecha) FechaLista
  7. FROM Movimientos
  8. GROUP BY FechaLista;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 14/07/2009, 09:34
 
Fecha de Ingreso: mayo-2008
Mensajes: 181
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: consultas con sumas

He añadido el campo fecha, date no null.
UPDATE Movimientos SET fecha = str_to_date(contable, '%d/%m/%Y');

Pero no me actualiza los datos de fecha con el nuevo formato.

Gracias
  #12 (permalink)  
Antiguo 14/07/2009, 10:16
 
Fecha de Ingreso: mayo-2008
Mensajes: 181
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: consultas con sumas

by id;

Tengo esta consulta me gustaria sacar, el id, sacar solo los meses de 2008, y que meses han sido, si hay de 2009 pues en otra linea
51,200eur,ene08 jun08 may08,2008
51,300,ene09 febrero jun09,2009

Tengo hecha esta otra consulta,
select *,sum(importe)as total from Movimientos;

pero no se que sucede que me pone solo una sola linea id 51 y me suma todo...

¿Es normal?

Gracias

Última edición por nightduke; 14/07/2009 a las 16:27
  #13 (permalink)  
Antiguo 03/08/2009, 18:26
 
Fecha de Ingreso: mayo-2008
Mensajes: 181
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: consultas con sumas

select id,sum(importe), group_concat(mes) from Movimientos where mes like '%09' group by id +0 asc;

Con esto me sale bien
pero quisiera que me salga

id 3,importe 60, meses feb09,mar09
id 3,importe 120, ene08,jun08
id 3, importe 120,ene07,jun07

¿Es posible sacar un listado asi?

Gracias
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 17:04.