2014-12-31 26 views
0

我想算达到3个结果在一个查询:如何显示每个月的树结果数?

  1. 计数的所有结果,其中从当前行

  2. 计数“app_creationdate” =(“月”)所有的结果,其中“app_start” =从当前行

  3. 计数( '月')的所有结果,其中从当前行 'app_creationsdate' < 'app_start' 和 'app_start'=( '月')

我的表:

APP_ID | app_creationdate(timestamp)| app_start(日期时间) 00001 | 2014-11-17 19:39:04 |情节中字09:30:00

SELECT 
    DATE_FORMAT(app_creationsdate, '%m') AS 'month', 
    COUNT(app_id) AS 'new', 
    (SELECT COUNT(app_id) 
    FROM appointments WHERE MONTH(app_start) = MONTH(NOW())) AS 'act', 
    (SELECT COUNT(app_id) 
    FROM appointments WHERE MONTH(app_creationsdate) < MONTH(app_start)) AS 'prev' 

FROM appointments 
WHERE app_owner = 2 AND app_creationsdate > DATE_SUB(now(), INTERVAL 12 MONTH) 
GROUP BY DATE_FORMAT(app_creationsdate, '%Y%m') 
+1

请勿使用DATE_FORMAT进行比较。 MySQL有许多功能可以将日期的一部分作为数字提取出来。 – siride

+0

你有什么其他解决方案建议? –

+0

阅读神奇的MySQL文档并找出答案。 – siride

回答

0

这可能更接近你想要的。我仍然对prev方案感到困惑,所以我尽了全力。我使用EXTRACT(YEAR_MONTH FROM ...)来获取每个日期的年和月,以便我们可以进行每月比较。这可能是您尝试使用DATE_FORMAT业务的原因。

SELECT DATE_FORMAT(app_creationsdate, '%m') AS 'month', 
    COUNT(app_id) AS 'new', 
    -- get all other appointments that start in this month 
    (SELECT COUNT(act.app_id) 
     FROM appointments AS act 
    WHERE EXTRACT(YEAR_MONTH FROM act.app_start) = EXTRACT(YEAR_MONTH FROM appointments.app_creationsdate)) AS 'act', 
    -- get all appointments that were created before they started (???) and that started before this month 

    (SELECT COUNT(prev.app_id) 
     FROM appointments AS prev 
    WHERE EXTRACT(YEAR_MONTH FROM prev.app_creationsdate) < EXTRACT(YEAR_MONTH FROM appointments.app_creationsdate) 
     AND EXTRACT(YEAR_MONTH FROM prev.app_start) = EXTRACT(YEAR_MONTH FROM appointments.app_creationsdate)) AS 'prev' 
    FROM appointments 
WHERE app_owner = 2 
    AND app_creationsdate > DATE_SUB(now(), INTERVAL 12 MONTH) 
GROUP BY EXTRACT(YEAR_MONTH FROM app_creationsdate) 
+0

那么在运行我的查询时,我得到以下结果:| app_creationdate =(所有月份都有结果)| new = app_creationsdate与'month'匹配月份的所有行| act =所有来自app_start与当前月份匹配的月份结果| prev =前几个月app_start匹配前几个月的所有结果 –

+0

@jhondano:首先,您只是描述了您的期望,而不是实际发生的情况。其次,你对prev的描述与SQL所做的不一致。我不确定你想要哪一个。 – siride

+0

刚刚更新问题再次...我希望现在它明确什么试图实现? –

0

我不完全相信你试图完成什么,但我注意到一两件事:

DATE_FORMAT(a2.app_start, '%M') = DATE_FORMAT('month','%m')

这个:DATE_FORMAT('month','%m')...的计算结果为NULL,所以等同于任何东西都不会起作用(我不不管怎么说,但我是MySQL的新手...... :))。