2013-05-21 70 views
2

嗨,這是一個相當棘手的問題(對我而言)。我有三張桌子。只返回最大值小於指定值的行

一個包含了手機號碼和唯一的ID(tbldealermobiles)

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

一個包含購買日期以及一個獨特的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 

一個包含客戶類型和獨特ID和其他細節。 (tblAllDealers)

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

我的問題是當我想要顯示,如果他們是「出站」和60多天前,如果他們的虛擬誰已超過30天前購買的客戶。

我只想爲喬恩和傑克返回所有手機號碼,因爲其他人在爲其客戶類型指定的日期之後購買了手機號碼。

我正在使用INNER JOIN鏈接唯一ID(FCS)上的3個表,我使用MAX返回只有MAX值小於日期的值,但我不知道如何將標準添加到指定兩個不同的日期。

下面是該查詢我到目前爲止 -

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將可能總是有一個購買日期早於指定的日期,但我只想要回那不是招」手機號碼t根據客戶組指定日期之後獲得購買日期。

在此先感謝您的幫助。

編輯:感謝格式化我的代碼Dukeling。

+0

您正在使用哪個數據庫? –

+0

MySQL 5.5.27 - 我猜這就是你的意思? –

回答

1

您想將條件從加入拉入having子句。加入是只有在這些日期之前查看記錄,所以你不知道之後是否會發生任何事情。

SELECT * 
FROM tbldealermobiles 
    INNER JOIN tblhistory ON tbldealermobiles.FCS = tblhistory.FCS 
    INNER JOIN tblAllDealers ON tbldealermobiles.FCS = tblAllDealers.FCS 
WHERE tblAllDealers.CustGroup in ('Virtual', 'Outbound') 
GROUP BY tbldealermobiles.mobilenumber 
HAVING MAX(tblhistory.PurchaseDate) < 
      MAX(case when tblAllDealers.CustGroup = 'Virtual' then date('2013-03-22') 
        when tblAllDealers.CustGroup = 'Outbound' then date('2013-04-21') 
       end) 
ORDER BY tblhistory.PurchaseDate DESC 
+0

謝謝戈登 - 這樣做更有意義,但是當我運行該查詢時,無論他們購買什麼日期,我都會收到所有'虛擬'和'出站'客戶。編輯:對不起,我意識到你已經把'> ='如果我把它轉過來我得到我後...對不起,懷疑你:D –

+0

完美的作品,謝謝戈登。 –

+0

嗨戈登 - 如果我把'>'我得到指定日期之前的日期?該查詢可以在指定日期後的日期修改嗎? –