2017-04-04 4 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 

今日から3ヶ月、今日から6ヶ月の間隔を空けようとしています。MYSQL:close_dtでProperty_IDを数えようとしています。Interval

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がブール値を数値コンテキストで整数として扱うためです。あなたは真の値の数を数えるためにちょうど "それらを合計する"ことができます。

EDIT:

あなたは3-6ヶ月したい場合は、あなたがどうなる:

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

は0-3ヶ月と同じ、INTERVAL 3月です。インターバル6ヶ月、3-6ヶ月と同じですか? – IeeTeY

+0

INTERVALロジックが必要なものに合っているかどうか分かりません。私がそれを3〜6ヶ月にしたいのであれば、それをSUM(pc.close_dt> = CURDATE() - INTERVAL 3-6 MONTH)と書くでしょうか? – IeeTeY

+0

@leeTey。 。 。あなたの質問は、あなたが欲しいものとして曖昧です。私はそのバージョンの答えを編集しました。 –

関連する問題