2010-07-14 55 views
1

幾個條件求和的名單我有一個MySQL聲明一個問題:MySQL的:在一個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; 

該語句返回一行與colums「總和」和「日期」。

現在我不只有一個日期('2010-06-01'),我有很多日期我必須得到它的總和(),但不是在一行中。我想每天有一個結果行。

因此,舉例來說,上面的語句返回我

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

現在我有日期2010-06-01,2010-06-02,2010-06-03,... 我可以做的是爲每個日期寫一個更改DATE的sql語句。所以如果我有10個日期,我將有10個數據庫的sql語句。 但我確實希望它有一個SQL語句,並且結果不應該是所有給定日期的總和,我希望每個日期都有一個結果行。所以結果應該喜歡:

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

我怎樣才能做到這一點?有人知道嗎?

非常感謝&最好的問候。

回答

3

使用mysql GROUP BY命令。經過充分測試的代碼示例:

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; 

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

+0

非常感謝,這似乎是不錯,但我怎麼能告訴的說法,我想有兩個給定日期之間的唯一結果行? 我在「2010-07-01」和「2010-07-10」之間添加了「... where ...和日期」,但它不知道日期列。 我該怎麼做? – Tim 2010-07-14 11:40:55

+0

啊,當然我可以這樣做: 「......其中......和DATE(FROM_UNIXTIME(rtime))在'2010-07-01'和'2010-07-10'之間」「但我認爲其表現是不太好,因爲它必須計算兩次日期的時間戳。 – Tim 2010-07-14 11:47:59

+0

解決時間: 按日期分組,日期介於'2010-07-01'和'2010-07-10'之間; – Tim 2010-07-14 12:13:21