0

クリント (ClientId など) と、サービスの料金を支払った日付とサービスが開始された日付に関するデータを含む SQL テーブルがあります。

Headings: ClientId, PurchaseDate, StartDate
Line 1: 1; 1/07/2012; 15/07/2012
Line 2: 2; 21/06/2012; 01/07/2012
Line 3: 3; 31/07/2012; 02/08/2012
Line 4: 4; 04/08/2012; 15/08/2012
Line 5: 5; 15/08/2012; 2/09/2012

前月にサービスが開始されたクライアントのみを選択するクエリを作成しました。条件ステートメントは次のとおりです。

WHERE StartDate >= DATEADD(month, -1, dateadd(month, datediff(month,0,getdate()),0)) 
and StartDate < dateadd(month, 1, dateadd(month, -1, dateadd(month, datediff(month,0,getdate())

ここで、前月にサービスの料金を支払ったクライアントも含むクエリが必要です。次のような発言があり得ると思います。

WHERE PurchaseDate >= DATEADD(month, -1, dateadd(month, datediff(month,0,getdate()),0)) 
and PurchaseDate < dateadd(month, 1, dateadd(month, -1, dateadd(month, datediff(month,0,getdate())

問題は、ある月の PurchaseDate と翌月の StartDate を持つクライアントが、両方の月のレポートに表示されることです。したがって、私が理解しているように、次の意味の複雑な条件があるはずです。

WHERE StartDate >= DATEADD(...)
 & StartDate < DATEADD(...) 
 & (PurchaseDate >= DATEADD(...)
 & PurchaseDate < DATEADD(...) 
 & PurchaseDate happened a month earlier than StartDate 

解決策を見つけるのを手伝ってください。

4

1 に答える 1

0

私はあなたがこれを意味すると思います:

WHERE StartDate >= DATEADD(...) & StartDate < DATEADD(...) 
& NOT (PurchaseDate >= DATEADD(...) & PurchaseDate < DATEADD(...))

先月購入したクライアントを今月の開始合計からNOT除外するために を追加しました

于 2012-08-22T00:46:48.560 に答える