2016-11-01 21 views
2

で間隔を一定の期間を指定します。私は彼らの最初の購入の日付の列と、別の時間に行った別の購入の列を持っています。 特定の購入が行われた期間を指定する列を作成したいとします。新しい期間が毎月20日に始まり、各顧客の最初の期間は最初の購入日と20日までとするように期間を定義する必要があります。 これは、以下に例示する:は、私は以下の表を持っているMySQLの

は私が必要なもの:私が試してみました

enter image description here


は一握りを経由して、これを実装するかのような文:ように

WHEN DAY(c.created)<21 and DAY(s.created)<21 and year(c.created)-year(s.created)=0 
THEN MONTH(c.created)-MONTH(s.created)+1 

WHEN DAY(c.created)>20 and DAY(s.created)<21 and year(c.created)-year(s.created)=0 
THEN MONTH(c.created)-MONTH(s.created)+2 

と。 この問題を処理するには簡単な方法と簡単な方法があるかどうかを知りたいですか?

は、私はこのように見つけることができるのMySQL Workbenchの6.3 CE

答えて

2

暦月顧客が購入を作っているの最初の日の日付で働く:

DATE_FORMAT(First_purchase , '%Y-%m-01') 

ので、 会計月の最初の日の日付は、各暦月の20日に始まり、このように見つけることができます。数字のこれらの種類のうちの2つの間の月数を取得するには、次のように

DATE_FORMAT(First_purchase - INTERVAL 19 DAY, '%Y-%m-01') + INTERVAL 19 DAY 

その後、あなたはTIMESTAMPDIFFを使用することができます。あなたの最初の会計月がDAY()の代わりにネイティブの日付計算を使用して数1

を持ってDATE_CREATEDが発見されているFirst_purchaseから始まる会計月の数を、、取得します

TIMESTAMPDIFF(
     MONTH, 
     DATE_FORMAT(First_purchase - INTERVAL 19 DAY, '%Y-%m-01') + INTERVAL 19 DAY, 
     DATE_FORMAT(Date_created - INTERVAL 19 DAY, '%Y-%m-01') + INTERVAL 19 DAY) + 1 

MONTH()、およびYEAR()の機能は、年末や閏年などの間に機能し続ける可能性が非常に高いです。

関連する問題