2011-10-25 102 views
1
SELECT 

table1.id 

From 
table1 
Join 
table2 
ON 
table1.id = table2.id 

WHERE 
table1.`date` BETWEEN CURDATE() - INTERVAL 1 MONTH AND CURDATE(); 

連接表的記錄集是這是得到我需要

id customer date 
1 john  2011-01-01 
2 john1  2011-02-02 
3 john2  2011-03-03 
4 john3  2011-04-04 
5 john4  2011-05-05 
6 john5  2011-06-06 
7 john6  2011-07-07 
8 john7  2011-08-08 
9 john8  2011-09-09 
10 john9  2011-10-10 
11 john10  2011-10-11 

我在想,如果這是where子句找到正確的信息的權利查詢,如果有超過30日期客戶天到期。

+0

叫什麼點加入? – Phil

回答

2
WHERE 
table1.`date` BETWEEN CURDATE() - INTERVAL 1 MONTH AND CURDATE() ; 

會給你今天和一個月前之間date所有行。如果這就是你想要的,繼續查詢。

如果你想與date所有行早於一個月前,使用此:

WHERE 
table1.`date` < CURDATE() - INTERVAL 1 MONTH ;  

或本(不完全與以前相同的結果):

WHERE 
table1.`date` < CURDATE() - INTERVAL 30 DAY ; 
4

我沒有看到你的SQL所以,這可能會做表2的重要性...

select id, customer, date 
    from table1 
where datediff(curdate(), date) > 30 
+0

+1我認爲他會因爲加入而返回任何東西,但除此之外,它會在過去的30天內返回比賽。 –

+1

用DATEDIFF()寫入條件的問題是不能使用'date'的索引。 (它應該是,但MySQL不能理解/轉換)。 –

+0

「我沒有看到表2的重要性 - 存在主義資格,也許?即只有在表格2中存在具有相同id值的一個行,也就是a.k.a. semijoin。 – onedaywhen