2011-10-25 42 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