mysql group只按日期计算多少结果

时间:2014-01-03 15:34:45

标签: php mysql date group-by

我在mysql数据库中有一个示例表名(info),如下所示:

id       dateAdded
----------------------------
1 2013-12-24 03:03:19
2 2013-12-24 03:04:19
3 2013-12-24 03:06:14
4 2013-12-24 03:07:23
5 2013-12-25 03:04:19
6 2013-12-26 03:02:19
7 2013-12-26 03:03:19

我有另一个表名(错误),如下所示:

id        date
----------------------------
11 2013-12-24 03:03:19
22 2013-12-24 03:04:19
33 2013-12-25 03:06:14
53 2013-12-25 03:04:19
62 2013-12-26 03:02:19

我想用相同的日期来计算两个表(信息和错误)中有多少个ID,因此结果将是:

date             countinfo       counterror
----------------------------------------
2013-12-24 4 2
2013-12-25 1 2
2013-12-26 2 1

请你帮我解决Mysql查询

3 个答案:

答案 0 :(得分:0)

尝试一下,也许它可以用更好的方式编写,但这会得到所需的输出。

SELECT
DATE(Sub.dateadded) as `Date`,
(   SELECT count(id) 
    FROM test.info 
    WHERE DATE(info.dateadded)=DATE(Sub.dateAdded)) as `CountInfo`,
(   SELECT count(id) 
    FROM test.`error` 
    WHERE DATE(`error`.`date`)=DATE(Sub.dateAdded)) as `ErrorInfo`
FROM
(
SELECT `date` as dateadded 
from test.`error`
UNION SELECT  dateadded 
FROM test.info
) Sub
GROUP BY Date(Sub.dateadded)

请注意,此处使用的数据库名称为test,请将其更改为您的数据库名称。

由于日期字段来自不同的表,因此您必须在子查询中UNION它们,以便获得相关日期。然后从那里使用dateparameter执行select中的简单子查询。

将来,尝试使用不是数据类型或函数名称等的名称命名表,然后不需要`来包装数据库,表,列名

修改

如果您想要特定日期,只需使用WHERE

GROUP BY

之前添加此行
WHERE DATE(Sub.dateadded) IN ('2013-12-24','2013-12-25')

如果你想在一个时间跨度之间做到这一点

WHERE DATE(Sub.dateadded) BETWEEN '2013-12-24' AND '2013-12-30'

这将提供12月24日至30日之间的日期。

答案 1 :(得分:0)

试试这个,请重命名我提供的表名。

信息:加入两个表获取不同ID的计数

    select Date(dateadded) as datepart, 
    count(distinct(infotable.id)) as countInfo, 
    count(distinct(errortable.id)) as counterror from infotable inner join errortable
    on Date(infotable.dateadded)=Date(errortable.date)
    group by datepart

答案 2 :(得分:-1)

尝试使用纯MySQL方法:

SELECT dateAdded, COUNT(*) as count_info FROM info GROUP BY dateAdded;
SELECT date, COUNT(*) as count_error FROM error GROUP BY date;