我有一个表格,格式如下。
FIELD TYPE DATA EXAMPLE
----------------------------------------------
id | int(11) | 123
job | int(7) | 456
date | datetime | 0000-00-00 00:00:00
complete | tinyint(4) | 0 or 1
我需要编写一个查询来查看这个大表,并计算每个项目每天有多少条记录完整状态0和完成状态1。 / p>
因为同一天可能有多个条目,我想到首先运行一个查询并获取唯一日期:
SELECT DISTINCT DATE(date) AS dt
FROM mytable
ORDER BY DATE(date) ASC
然后在其中运行另一个查询并执行计数
SELECT
SUM(id) AS cnt,
job,
DATE(date)
FROM mytable
WHERE complete = 0
AND DATE(date) = '".$uniqueDate."'
GROUP BY job
但是开始变得有点复杂,因为我还需要为完成= 1
运行第二个类似的查询要做到这一点还有更好的方法,哈?
更新:
数据看起来像这样:
is job date complete
-----------------------------------------------
234 324234 2011-06-17 06:59:24 0
235 324234 2011-06-17 08:09:22 1
235 544560 2011-06-18 02:51:12 0
244 677234 2012-07-17 11:12:14 1
基本上,当初始脚本运行时,它将收集数据并按以下格式将其插入另一个表中:
stat_jobID (job ID from previous table)
stat_date (date from previous table)
stat_complete (count total)
stat_incomplete (count total)
答案 0 :(得分:2)
complete
符合GROUP BY
条件,因此您可以获得每个计数。
SELECT job,
complete,
DATE(date) AS report_date,
COUNT(*)
FROM mytable
GROUP BY job, complete, report_date
你也可以转动它,这样你就可以在同一行得到完整和不完整的内容:
SELECT job,
SUM(complete >= 1) AS completed,
SUM(complete = 0) AS not_completed,
DATE(date) AS report_date
FROM mytable
GROUP BY job, report_date