您好我终于找到了如何以单行获取结果,但我仍坚持获得正确的结果。
以下是我的查询。我正在尝试报告COUNT个故障并完成一个月的故障。当我更改dateFormat(date_reported到dateFormat(date_completed数字更改,从报告到完成交替。
select
count(r.rpt) as Reported,
count(c.cpt) as Completed,
DATE_FORMAT(DATE_REPORTED,'%M %Y') as MONTH
from
(select COUNT(faultid) as cpt
from fault_info
where status = 'Completed'
and date_completed >= LAST_DAY(NOW()) - INTERVAL 6 MONTH + INTERVAL 1 DAY
) c,
(select COUNT(faultid) as rpt
from fault_info
where status != 'Completed'
and date_reported >= LAST_DAY(NOW()) - INTERVAL 6 MONTH + INTERVAL 1 DAY
) r,
fault_info
GROUP BY MONTH
ORDER BY date_reported desc
任何帮助都会非常感激!!
这是我追求的输出。但目前我只为两个列获得相同的数字。如上所述,要更改数字,我更改了DateFormat(date_reported - > DateFormat(date_completed,但数字仍然保持不变。它们对于一个而不是另一个是正确的。
选择DateFormat(date_reported ...
报告,完成,MONTH
'99','99','2014年1月'
'72','72','2013年12月'
'71','71','2013年11月'
'107','107','2013年10月'
'114','114','2013年9月'
'112','112','2013年8月'
或选择DateFormat(date_completed ......
报告,完成,MONTH
'68','68','2014年1月'
'65','65','2013年12月'
'76','76','2013年11月'
'113','113','2013年10月'
'124','124','2013年9月'
'140','140','2013年8月'
通过这种方式,我可以进行百分比比较,如果我们关闭更多我们打开的错误,我可以看到。所以我需要实际报告一个月与实际关闭一个月。
答案 0 :(得分:2)
稍微调整一下,你应该能够在单次传递中与多次传递
SELECT
DATE_FORMAT(DATE_REPORTED,'%M %Y') as MONTH,
SUM( status = 'Completed' ) as Completed,
SUM( status != 'Completed' ) as StillOpen
from
fault_info
group by
DATE_FORMAT(DATE_REPORTED,'%M %Y'),
order by
YEAR( DATE_REPORTED ) desc,
MONTH( DATE_REPORTED ) desc
逻辑表达式的总和(例如status ='Completed')当true等于1时,否则为0.因此,通过行查询,您可以通过聚合获得单个组的两个可能计数,并仍然按降序排序最近的最新日期(年/月)基础上的历史值。