2012-05-14 4 views
0

i ont une activité table stocke un besoin de générer une somme de sélection de vue d'ensemble (total) en fonction de la date (unixtime)mysql sélectionner plusieurs groupes multiples où

comme Select SUM (total) de la liste où la date entre 123456789 et 2000000 somethings comme celui-ci ..

mais je voudrais obtenir plus avec plages de dates d'une requête

avoir un résultat listables comme

  • somme (total) il y a 2 jours
  • somme (total) d'hier
  • somme
  • (total) d'aujourd'hui

et ainsi de suite ...

+0

vous pouvez UNION plusieurs requêtes ensemble si cela aide. – bumperbox

Répondre

1

Vous n'avez pas besoin de UNION. Quelque chose comme ceci devrait fonctionner:

select SUM(total) as Total, 
    SUM(
     case when date >= DATE_SUB(CONCAT(CURDATE(), ' 00:00:00'), INTERVAL 2 DAY) 
      and date < DATE_SUB(CONCAT(CURDATE(), ' 00:00:00'), INTERVAL 1 DAY) then total end 
    ) TwoDaysAgoTotal, 
    SUM(
     case when date >= DATE_SUB(CONCAT(CURDATE(), ' 00:00:00'), INTERVAL 1 DAY) 
      and date < CONCAT(CURDATE(), ' 00:00:00') then total end 
    ) as OneDayAgoTotal, 
    SUM(
     case when date >= CONCAT(CURDATE(), ' 00:00:00') then total end 
    ) as TodayTotal 
from list 
where date between 123456789 and 2000000 
0

Déclaration de l'Union ne résout pas ton cas? http://dev.mysql.com/doc/refman/4.1/pt/union.html

+0

l'union fait réellement. mais c'est vraiment lent (à ce moment je fais 16 Days of History avec SUM() et où je sélectionne les dates (c'est en unixtime (pas de date sql)) en utilisant 16 Select .. beaucoup plus vite qu'un union .... mais ça est vraiment mauvais code je pense, je suppose que la performance vient parce que les dates sont stockées en tant que nombres entiers au lieu de SQL Dates – Nullx8

Questions connexes