Ver Mensaje Individual
  #4 (permalink)  
Antiguo 05/03/2012, 16:52
Avatar de gnzsoloyo
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: 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)