我在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查询
答案 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;