3

こんにちは、これはかなりトリッキーです(私にとって)。私は3つのテーブルを持っています。

1 つには、携帯電話番号と一意の ID (tbldealermobiles) が含まれています。

FCS - Mobile number
1234 - 07464648787
1234 - 07565465465
3566 - 07878989989
7899 - 07464646466
7899 - 07565465464
9654 - 07589898998 

1 つには、購入日、一意の ID、およびその他の詳細が含まれています (tblhistory)

FCS - purchase date - purchased
1234 - 22/04/2013 - gloves
1234 - 14/03/2013 - hat
1234 - 01/03/2013 - coat
3566 - 20/04/2013 - gloves
3566 - 19/04/2012 - hat
7899 - 14/03/2013 - shoes
9654 - 24/05/2013 - hat
9654 - 19/04/2013 - shoes

1 つには、顧客タイプと一意の ID およびその他の詳細が含まれています。(tblAllDealers)

FCS - Cust type - name
1234 - Virtual - Jim
3566 - Outbound - Jon
7899 - Virtual - Jack
9654 - Outbound - Susan

私の問題は、「アウトバウンド」の場合は 30 日以上前に、仮想の場合は 60 日以上前に購入した顧客を表示したいときに発生します。

Jon と Jack のすべての携帯電話番号のみを返したいと思います。これは、他のユーザーが顧客タイプに指定された日付以降に購入したためです。

INNER JOIN を使用して一意の ID(FCS) で 3 つのテーブルをリンクしています。MAX を使用して、MAX 値が日付よりも小さい値のみを返していますが、2 つの異なる日付を指定する基準を追加する方法がわかりません。 .

これが私がこれまでに持っているクエリです-

SELECT *
FROM tbldealermobiles
  INNER JOIN tblhistory ON tbldealermobiles.FCS = tblhistory.FCS
  INNER JOIN tblAllDealers ON tbldealermobiles.FCS = tblAllDealers.FCS
WHERE (tblAllDealers.CustGroup = 'Virtual' AND
       tblhistory.PurchaseDate < date('2013-03-22'))
    OR 
      (tblAllDealers.CustGroup = 'Outbound' AND 
       tblhistory.PurchaseDate < date('2013-04-21')) 
GROUP BY tbldealermobiles.mobilenumber 
HAVING MAX(tblhistory.PurchaseDate) < date('2013-04-21') 
ORDER BY tblhistory.PurchaseDate DESC

問題は、FCS の購入日が指定された日付よりも前になる可能性が高いことですが、顧客グループによっては、指定された日付よりも後に購入日が指定されていない携帯電話番号のみを返したいと考えています。

よろしくお願いします。

編集:私のコードをフォーマットしてくれてありがとうDukeling。

4

1 に答える 1