同一列上的多个where子句

时间:2014-01-25 11:40:29

标签: mysql join union where-clause

您好我终于找到了如何以单行获取结果,但我仍坚持获得正确的结果。

以下是我的查询。我正在尝试报告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月'

通过这种方式,我可以进行百分比比较,如果我们关闭更多我们打开的错误,我可以看到。所以我需要实际报告一个月与实际关闭一个月。

1 个答案:

答案 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.因此,通过行查询,您可以通过聚合获得单个组的两个可能计数,并仍然按降序排序最近的最新日期(年/月)基础上的历史值。