2010-07-14 3 views
1

J'ai un problème avec une déclaration MySQL:MySQL: liste de somme pour plusieurs conditions dans une instruction SQL

select sum(x) as "sum", "01.06.2010" as "date" from (
    select distinct a.id as ID, a.dur as x from b_c 
     inner join c on b_c.c_id = c.id 
     inner join a on c.id = a.c_id 
     inner join a_au on a.id = a_aud.id 
     inner join d on a_au.rev = d.rev 
     where 
     b_c.b_id = 30 and 
     a_au.stat != 1 and 
     DATE(FROM_UNIXTIME(rtime)) = DATE('2010-06-01') 
) AS SubSelectTable; 

Cette instruction renvoie une ligne avec la colums « somme » et « date ».

Maintenant, j'ai non seulement une date ('2010-06-01'), j'ai beaucoup de dates que je dois obtenir la somme(), mais pas dans une seule rangée. Je veux avoir par jour une ligne de résultat.

Ainsi, par exemple, la déclaration ci-dessus me retourne

sum   date 
------------------- 
20  01.06.2010 

Maintenant, j'ai les dates 2010-06-01, 2010-06-02, 2010-06-03, ... Ce que je peut faire est d'écrire pour chaque date une déclaration SQL qui change la date. Donc, si j'ai 10 dates, j'aurai 10 déclarations SQL pour la base de données. Mais je le voulais avec une instruction SQL, et le résultat ne devrait pas être la somme de toutes les dates données, je veux avoir une ligne résultat par date. Donc le résultat devrait être comme ça:

sum   date 
------------------- 
20  01.06.2010 
133  02.06.2010 
19  03.06.2010 
88  04.06.2010 
...    ... 

Comment est-ce que je peux faire ceci? Est-ce que quelqu'un sait?

Merci beaucoup à l'avance & Cordialement.

Répondre

3

Utilisez la commande mysql GROUP BY. exemple complètement de code non testé:

select sum(x) as "sum", date as "date" from (
    select distinct a.id as ID, a.dur as x, DATE(FROM_UNIXTIME(rtime)) as date from b_c 
     inner join c on b_c.c_id = c.id 
     inner join a on c.id = a.c_id 
     inner join a_au on a.id = a_aud.id 
     inner join d on a_au.rev = d.rev 
     where 
     b_c.b_id = 30 and 
     a_au.stat != 1 
) AS SubSelectTable 
group by date; 

Voir: http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html

+0

Merci beaucoup, cela semble être d'accord, mais comment puis-je dire à la déclaration que je veux avoir uniquement les lignes de résultats entre deux dates données? J'ai ajouté un "... où ... et date entre '2010-07-01' et '2010-07-10'" mais il ne connaît pas la colonne de date. Comment puis-je faire cela? – Tim

+0

ah, bien sûr, je pouvais le faire: "... où ... et DATE (FROM_UNIXTIME (rtime)) entre '2010-07-01' et '2010-07-10'" mais je pense que la performance est pas si bon, car il doit calculer l'horodatage à une date deux fois. – Tim

+0

résolu: groupe par date ayant une date entre '2010-07-01' et '2010-07-10'; – Tim

Questions connexes