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

sumar valores

Estas en el tema de sumar valores en el foro de Mysql en Foros del Web. Saludos amigos, tengo el siguiente codigo @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código mysql: Ver original SELECT z1.id , z1.fecha inicio_lectura , z2.fecha final_lectura , z1.lectura anterior , z2.lectura ...
  #1 (permalink)  
Antiguo 29/07/2009, 17:19
 
Fecha de Ingreso: septiembre-2008
Mensajes: 242
Antigüedad: 15 años, 7 meses
Puntos: 1
sumar valores

Saludos amigos, tengo el siguiente codigo

Código mysql:
Ver original
  1. SELECT z1.id, z1.fecha inicio_lectura, z2.fecha final_lectura, z1.lectura anterior,z2.lectura actual,z1.lectura consumo,FORMAT((((z2.lectura-z1.lectura)/z1.lectura)*100),2)variacion   FROM nortepordia z1 INNER JOIN nortepordia  z2  ON (z1.id = z2.id) WHERE (DATE_FORMAT(z1.fecha,'%Y-%m-%d') = '"&fecha1&"' AND DATE_FORMAT(z2.fecha,'%Y-%m-%d')='"&fecha2&"' ) group by id

Esta consulta muestra el resultado dando un valor para la fecha1 y para la fecha 2entre otros campos pero los que importan son estos, ejemplo:

inicio_lectura final_lectura anterior actual
01/01/2007 31/01/2007 23 12

esta consulta para una aplicacion que ya tengo corriendome funciona sin ningun problema, el tema pasa que ahora me pidieron otra cosa, en el ejemplo anterior bastaba con mostrar esos 2 valores y ademas se hacen otras operacion segun se aprecia la consulta.....ahora lo que necesito es sumar todos los valores desde el inicio de la fecha hasta el termino de l a fecha......en resumen necesito mostrar la sumatoria de todos esos valores, en el ejemplo seria del 01/01/2007 al 31/01/2007 .....gracias........disculpen si me alargue mucho
  #2 (permalink)  
Antiguo 29/07/2009, 20:01
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: sumar valores

utiliza en el where la clausula between entre las dos fechas.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 30/07/2009, 09:47
 
Fecha de Ingreso: octubre-2008
Mensajes: 75
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: sumar valores

Aca tenes master:


SELECT
z1.id,
z1.fecha inicio_lectura,
z2.fecha final_lectura, z1.lectura anterior,z2.lectura actual,z1.lectura consumo,
FORMAT((((z2.lectura-z1.lectura)/z1.lectura)*100),2)variacion
FROM nortepordia z1
INNER JOIN nortepordia z2
ON (z1.id = z2.id)
WHERE DATE_FORMAT(z1.fecha,'%Y-%m-%d') BETWEEN '"&fecha1&"' AND '"&fecha2&"' GROUP BY id


El tema es como dice Huesos52, fijate el final del codigo que te lo puse con el BETWEEN, saludos



La Santa
  #4 (permalink)  
Antiguo 30/07/2009, 10:19
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: sumar valores

Cita:
WHERE DATE_FORMAT(z1.fecha,'%Y-%m-%d') BETWEEN '"&fecha1&"' AND '"&fecha2&"' GROUP BY id
Santa... la consulta está bien, pero sobra la función date_format.
Ese es el formato por defecto de mysql.

saludeos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 30/07/2009, 10:47
 
Fecha de Ingreso: octubre-2008
Mensajes: 75
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: sumar valores

Hola Huesos, si puede ser lo deje asi por que me parece que en la DB estan guardando las fechas como dd/mm/yy, un saludo grande



La Santa
  #6 (permalink)  
Antiguo 30/07/2009, 12:13
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: sumar valores

Cita:
Iniciado por santa Ver Mensaje
Hola Huesos, si puede ser lo deje asi por que me parece que en la DB estan guardando las fechas como dd/mm/yy, un saludo grande



La Santa
Que tal santa..

Si las fechas se guardan en formato dd/mm/yyyy la forma correcta es convertir la cadena entrante y no el campo de la tabla. Algo así:

Código sql:
Ver original
  1. SELECT
  2. z1.id,
  3. z1.fecha inicio_lectura,
  4. z2.fecha final_lectura, z1.lectura anterior,z2.lectura actual,z1.lectura consumo,
  5. FORMAT((((z2.lectura-z1.lectura)/z1.lectura)*100),2)variacion
  6. FROM nortepordia z1
  7. INNER JOIN nortepordia z2
  8. ON (z1.id = z2.id)
  9. WHERE z1.fecha BETWEEN str_to_date(fecha1,'dd/mm/yyyy')
  10. AND str_to_date(fecha2,'dd/mm/yyyy') GROUP BY id

Igualmente un saludo grande.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #7 (permalink)  
Antiguo 30/07/2009, 12:26
 
Fecha de Ingreso: septiembre-2008
Mensajes: 242
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: sumar valores

la verdad no me resulta, probablemente me estoy complicando mucho....

select id medidor, sum(lectura) from tabla where fecha between fecha 1 and fecha 2

cone sta consulta me resulta muy bien lo que quiero, pero el tema es que quieroincluir otros calculos como ejemplo la lectura anterior, se me ocurrio hacer algo como esto ocupando otra consulta pero no se como se hace...si me orientan creoq ue es mas facil que lo anteior

select id medidor, sum(lectura), (select id medidor, sum(lectura) from tabla where fecha between fecha 3 and fecha 4 ) from tabla where fecha between fecha 1 and fecha 2

gracias por darse el tiempo de ayudarme

en cuanto al formato de entrada, estoy usando YYYY/MM/DD ya que al pasarlas dsde donde consulto las reordeno y en la base se guardan con el mismo formato
  #8 (permalink)  
Antiguo 30/07/2009, 12:32
 
Fecha de Ingreso: octubre-2008
Mensajes: 75
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: sumar valores

Amigo Huesos en realidad no importa si tranformas los datos de la DB o el dato ingresante el tema es que los compares por igual, si no te gusta mi metodo tirate un SQL vos en vez de siempre decir lo justo. Ojo no lo digo de mala leche ni con animo de ofender, por favor que no se mal entienda, saludos



La Santa
  #9 (permalink)  
Antiguo 30/07/2009, 12:48
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: sumar valores

Cita:
si no te gusta mi metodo tirate un SQL vos en vez de siempre decir lo justo.
No es que no me guste. Es que no sirve de nada. Y ahí tienes la prueba.

Código mysql:
Ver original
  1. mysql> select *from prueba_fechas;
  2. +--------+------------+
  3. | campo1 | fecha1     |
  4. +--------+------------+
  5. |      1 | 2009-07-22 |
  6. |      2 | 2009-07-27 |
  7. |      3 | 2009-08-10 |
  8. |      4 | 2009-08-18 |
  9. +--------+------------+
  10. 4 rows in set (0.00 sec)
  11.  
  12. mysql> select *from prueba_fechas where fecha1 between str_to_date('20/07/2009','%d/%m/%Y') and str_to_date('30/07/2009','%d/%m/%Y');
  13. +--------+------------+
  14. | campo1 | fecha1     |
  15. +--------+------------+
  16. |      1 | 2009-07-22 |
  17. |      2 | 2009-07-27 |
  18. +--------+------------+
  19. 2 rows in set (0.00 sec)
  20.  
  21. mysql> select *from prueba_fechas where date_format(fecha1,'%Y-%m-%d') between '20/07/2009' and '30/07/2009';
  22. +--------+------------+
  23. | campo1 | fecha1     |
  24. +--------+------------+
  25. |      1 | 2009-07-22 |
  26. |      2 | 2009-07-27 |
  27. |      3 | 2009-08-10 |
  28. |      4 | 2009-08-18 |
  29. +--------+------------+
  30. 4 rows in set (0.00 sec)
  31.  
  32. mysql>

Fijate que con el método que propuse, si hace bien el filtro. revisa las fechas de la tabla.
Con el método que propones no hace nada. No tiene en cuenta ningún filtro.

Cita:
Ojo no lo digo de mala leche ni con animo de ofender, por favor que no se mal entienda, saludos
No te preocupes. Lo que digo lo sostengo y lo demuestro.
Y si me equivoco, lo acepto y agradezco a la persona que me ha corregido.

De las equivocaciones es que aprendemos.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #10 (permalink)  
Antiguo 30/07/2009, 13:00
 
Fecha de Ingreso: octubre-2008
Mensajes: 75
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: sumar valores

Huesos el tema es que creo que las fechas las estaba guardando como dd/mm/yy por que si las fechas las guarda en un campo date es muy tonto comparar con distinto formato en la base de datos, saludos


La Santa
  #11 (permalink)  
Antiguo 30/07/2009, 13:18
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: sumar valores

santa..
Mysql maneja un unico formato de fechas y es: YYYY-MM-DD.
Esto lo hace para evitar confusiones entre los meses y los días con fechas como: 03/02/2009 (Marzo 2 o Febrero 3?). Por el contrario, el formato YYYY-DD-MM no existe y siempre habrá una correcta interpretación de la fecha que sea con el formato estándar.

Si hay forma de cambiar el formato de la fecha por defecto de mysql, no lo se, pero he buscado y nunca he encontrado nada. Ademas, para eso existen las funciones date_format, get_format y str_to_date, para no tocar dicho formato e interpretar las fechas como nos plazca.


Por eso te digo que tu metodo no sirve, por que dificilmente encontraras un servidor mysql (Si existe la forma) con el formato del campo como dd/mm/yyyy.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #12 (permalink)  
Antiguo 31/07/2009, 07:50
 
Fecha de Ingreso: octubre-2008
Mensajes: 75
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: sumar valores

ajajjajaj si tenes razon...
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 09:55.