Ver Mensaje Individual
  #15 (permalink)  
Antiguo 19/11/2009, 08:35
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, 5 meses
Puntos: 2658
Respuesta: Extraer registros que tengan fecha menos a 30 días de antiguedad

¿Esta tabla tiene una entrada por cada descarga que se hace?
Más pareciera la tabla que contiene la descripción de los archivos a descargar. Si es la que guarda un registro por cada descarga hecha parece tener una enorme redundancia de datos...

Probemos afinar:
Código sql:
Ver original
  1. SELECT id, name, descargas downloads
  2. FROM
  3.    (
  4.    SELECT id, name, COUNT(downloads) descargas
  5.    FROM dl_files
  6.    WHERE FROM_UNIXTIME(LAST,'%Y-%m-%d') BETWEEN DATE_SUB(NOW(),INTERVAL 30 DAY) AND DATE(NOW())
  7.    GROUP BY id) t1
  8. ORDER BY descargas DESC
  9. LIMIT 5;

Eso debería contar todas aquellas entradas donde `downloads`no tuviese un valor NULL. En caso de que pudiese tener un valor cero (0) y no un NULL, entonces debería ser:

Código sql:
Ver original
  1. SELECT id, name, descargas downloads
  2. FROM
  3.    (
  4.    SELECT id, name, SUM(IF(downloads!=0, 1, 0)) descargas
  5.    FROM dl_files
  6.    WHERE FROM_UNIXTIME(LAST,'%Y-%m-%d') BETWEEN DATE_SUB(NOW(),INTERVAL 30 DAY) AND DATE(NOW())
  7.    GROUP BY name) t1
  8. ORDER BY descargas DESC
  9. LIMIT 5;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)