MYSQL:尝试在close_dt Interval上计算Property_IDs

时间:2017-04-04 15:10:54

标签: mysql sql

select 
pd.state AS StateName, 
pd.county AS `County Name`,

CASE pc.close_dt WHEN pc.close_dt >= DATE(NOW() - INTERVAL 3 MONTH)
THEN COUNT(pd.property_id) 
 ELSE NULL
  END AS `3 MONTH`, 
CASE pc.close_dt WHEN pc.close_dt >= DATE(NOW() - INTERVAL 6 MONTH)
THEN COUNT(pd.property_id) 
 ELSE NULL
  END AS `6 MONTH`
from resnet.property_details pd
join resnet.property_closings pc
    on pd.property_id = pc.Property_id
GROUP BY pd.state,pd.county

我试图从今天开始3个月的时间间隔,从今天起6个月后关闭的房产。

enter image description here

我希望它看起来像这样:

enter image description here

1 个答案:

答案 0 :(得分:1)

您需要条件聚合。在MySQL中,您可以这样做:

select pd.state AS StateName, pd.county AS `County Name`,
       SUM(pc.close_dt >= CURDATE() - INTERVAL 3 MONTH) AS `3 MONTH`, 
       SUM(pc.close_dt >= CURDATE() - INTERVAL 6 MONTH) AS `6 MONTH`
from resnet.property_details pd join
     resnet.property_closings pc
     on pd.property_id = pc.Property_id
group by pd.state, pd.county;

注意:

  • 您的case语法没有意义。您有条件(case when <condition>或常量为case <column> when <value>)。但不是两个。
  • date(now()) = CURDATE()
  • 您不需要case表达式,因为MySQL将布尔值视为数字上下文中的整数。你可以简单地总结一下&#34;计算真值的数量。

编辑:

如果您想要3-6个月,那么您可以这样做:

   SUM(pc.close_dt >= CURDATE() - INTERVAL 6 MONTH AND
       pc.close_dt < CURDATE() - INTERVAL 3 MONTH) AS `6 MONTH`