2013-05-21 42 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

嗨戈登 - 如果我把'>'我得到指定日期之前的日期?该查询可以在指定日期后的日期修改吗? –