2016-05-09 92 views
1

我有每個客戶和和VISIT_DATE多行的表。訪問日期也可以爲空。如何從MySQL表,最大選擇行值

我的表是如下:

客戶:

id | name  | email 
1 | John Doe1 | [email protected] 
2 | John Doe2 | [email protected] 
3 | John Doe3 | [email protected] 

store_customers

id | customer_id | store_id | email_optedin | visit_date 
1 |  1   | 1  | 1   | 2015-11-30 
2 |  1   | 2  | 1   | 2016-05-08 
3 |  1   | 3  | 1   | null 
4 |  2   | 1  | 1   | 2015-04-30 
5 |  2   | 2  | 1   | 2015-08-40 
6 |  2   | 3  | 1   | 2015-12-12 
7 |  3   | 1  | 1   | null 
8 |  3   | 2  | 1   | null 
9 |  3   | 3  | 1   | null 

我想找回誰要麼還沒有到任何三者的回訪客戶商店或自指定日期以來未訪問(例如2016-04-15)。

我期待的客戶2和3而不是1

我嘗試此查詢:

select distinct * from customers 
inner join store_customers on store_customers.customer_id = customers.id 
    where customers.email != '' and 
    store_customer.store_id in (1,2,3) and customers.emailStatus not in ('Unverified','Bounced','Spammed') 
    and 
    (
     store_customer.email_optedin = 1 
     and max(store_customers.visit_date) <= '2016-04-15' 
     or account_customer.visit_date is null 
    ); 

這是行不通的。我需要爲商店ID設置),我需要選擇沒有任何訪問的客戶(所有指定商店的訪問日期爲空),或者如果有一個或多個訪問日期可用,則比較最大日期到指定的日期。

我發現了類似的問題,但沒有一個答案適用於我,主要是因爲要求選擇那些沒有訪問的客戶或者他們做了至少一個,然後比較最新的訪問日期存儲在連接表中。

我試圖做到這一切在一個查詢,但如果這是不可能的,那麼我可以打破它爲好。我也不想改變連接的順序,因爲還有很多其他的東西添加到這個查詢中,改變連接的順序可能會成爲一個問題。

我真的很感激,可以提供任何幫助。

問候,

瓦卡

+0

我忘了提,我希望查詢返回客戶2和3 –

+0

「或account_customer.visit_date爲空」 :該表不是JOIN的一部分... – Webomatik

+0

對不起。 account_customer是一個錯字。它應該是store_customers。從store_customer表中,我預計行6(customer_id 2)和行7,8,9之一,因爲這三行大約相同的customer_id(3)。 –

回答

0

嘗試此查詢

SELECT 

     customers.id, 
     customers.name, 
     MAX(store_customers.visit_date) 

    FROM 

    customers LEFT JOIN store_customers on customers.id = store_customers.customer_id 

    GROUP BY customers.id,customers.name 

    HAVING MAX(store_customers.visit_date) < '2016-04-15' OR MAX(store_customers.visit_date) IS NULL