2010-07-14 52 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