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

Select sum con between

Estas en el tema de Select sum con between en el foro de Mysql en Foros del Web. Buenos Días: Yo necesito hacer una 'select' que sume registros dependiendo si se da una u otra condición ejemplo: campo a, sumar 1 si esta ...
  #1 (permalink)  
Antiguo 05/03/2012, 07:39
Usuario no validado
 
Fecha de Ingreso: abril-2009
Ubicación: Buenos Aires
Mensajes: 413
Antigüedad: 15 años, 6 meses
Puntos: 3
Select sum con between

Buenos Días:

Yo necesito hacer una 'select' que sume registros dependiendo si se da una u otra condición ejemplo:
campo a, sumar 1 si esta entre las fechas f1,f2
campo b, sumar 1 si esta entre las fechas f3,f4

en 'VFP' seria algo así:
select sum(iif(betw(fecha,f1,f2),1,0)) as a,;
sum(iif(betw(fecha,f3,f4),1,0)) as b, from tabla

No me doy cuenta como hacer esto en 'MySql'
Desde ya Muchas Gracias por su ayuda
  #2 (permalink)  
Antiguo 05/03/2012, 07:42
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 14 años, 2 meses
Puntos: 331
Respuesta: Select sum con between

Se hace de la misma manera que lo estás haciendo ahora, consulta la sintaxis del lenguaje.
__________________
Fere libenter homines, id quod volunt, credunt.
  #3 (permalink)  
Antiguo 05/03/2012, 15:50
Usuario no validado
 
Fecha de Ingreso: abril-2009
Ubicación: Buenos Aires
Mensajes: 413
Antigüedad: 15 años, 6 meses
Puntos: 3
Respuesta: Select sum con between

Gracias repara2, pero la sintaxis del between es para después del where, ejemplo:

select * from publicaciones where fechaalta between '2011-12-01 01:01:01' and '2011-12-31 23:59:59';

asi funciona bien pero yo tengo que colocarla dentro del sum para que sume o no dependiendo de la fecha, ejemplo:

select sum(if(between(fechaalta,'1990-01-01 01:01:01','2012-03-05 24:00:00'),1,0)) as total from publicaciones;

así me esta dando error y no me doy cuenta porque.

Te agradecería si podés darme otra ayuda.
Muchas Gracias
  #4 (permalink)  
Antiguo 05/03/2012, 16:52
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Select sum con between

Tienes al menos dos errores:
1) BETWEEN no es una función sino un operador de comparación que determina si una expresión dada está o no en un rango determinado.
Cita:
Iniciado por Manual de referencia
expr BETWEEN min AND max
Si expr es mayor o igual que min y expr es menor o igual a max, BETWEEN retorna 1, de otro modo retorna 0. Esto es equivalente a la expresión (min <= expr AND expr <= max) si todos los argumentos son del mismo tipo. De otro modo la conversión de tipos tiene lugar según las reglas descritas al principio de la sección, pero aplicadas a todos los argumentos.
2) La hora 24:00:00 no existe a nivel de datos. El rango va de 00:00:00 a 23:59:59, lo que significa en realidad 86399 segundos, por lo que cuando se hacen operaciones con la hora en ese contexto es posible que haya que corregir los cálculos por 1 segundo.
La hora 24 no existe, porque es la hora 00 del día siguiente.
Entonces, la consulta quedaría
Código MySQL:
Ver original
  1.     SUM(IF(fechaalta BETWEEN '1990-01-01 01:01:01' AND '2012-03-05 23:59:59',1,0)) total
  2. FROM publicaciones;
Ahora bien, existe un tercer posible error, que es conceptual: El rango que quieres es desde la 01:01:01 de la mañana del día 01/01/1990.. ¿Eso es correcto? Porque eso significa que hay una hora que no se analizará.

Otra detalle es que hay una forma más simple de hacerlo, si lo que quieres es que tome todos los valores comprendidos entre las dos fechas, sin importar la hora en que ocurran, y es:
Código MySQL:
Ver original
  1.     SUM(IF(DATE(fechaalta) BETWEEN '1990-01-01' AND '2012-03-05',1,0)) total
  2. FROM publicaciones;
Las dos consultas son equivalentes, pero la segunda es más simple de leer.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 05/03/2012, 17:01
Usuario no validado
 
Fecha de Ingreso: abril-2009
Ubicación: Buenos Aires
Mensajes: 413
Antigüedad: 15 años, 6 meses
Puntos: 3
Respuesta: Select sum con between

Perfecto Amigo!!, Muy clara la explicación, funciono perfectamente.
Muchas Gracias

Etiquetas: registros, select, sql, sum, tabla, campos
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 10:46.