2017-04-04 32 views
0
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 

我試圖從今天開始,從今天開始的6個月的時間間隔已關閉。MYSQL:試圖通過close_dt計算Property_IDs間隔

enter image description here

我希望它看起來像這樣:

enter image description here

回答

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在數字上下文中將布爾值視爲整數。你可以「總結它們」來計算真值的數量。

編輯:

如果你要3-6個月,那麼你會怎麼做:

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

是間隔3個月,同爲0-3個月。間隔6個月,與3-6個月相同? – IeeTeY

+0

我不確定INTERVAL邏輯是否符合我的需要。如果我希望它是3-6個月,我會把它寫成SUM(pc.close_dt> = CURDATE() - INTERVAL 3-6 MONTH)?? – IeeTeY

+0

@leeTey。 。 。你的問題是不明確的,你想要什麼。我編輯了該版本的答案。 –