2013-02-19 65 views
1

我的表是這樣的:詢問查詢在MySQL

CreateDate | UserID 
2012-01-1 |  1 
2012-01-10 |  2 
2012-01-20 |  3 
2012-02-2 |  4 
2012-02-11 |  1 
2012-02-22 |  2 
2012-03-5 |  3 
2012-03-13 |  4 
2012-03-17 |  5 

我需要的查詢,以顯示其2013 2月1日之後創建的用戶名和數據庫befor 1不存在2013年2月

從以上例如,結果必須是:

CreateDate | UserID 
2012-02-2 |  4 
2012-03-13 |  4 
2012-03-17 |  5 

它是否僅在單個查詢中解析而沒有存儲過程?

回答

0

這是做這件事:

select 
    CreateDate, 
    UserID 
from Users 
where CreateDate >= '2012-02-01' 
and UserId not in (
    select UserId 
    from Users 
    where CreateDate < '2012-02-01' 
) 

SqlFiddle鏈接:http://www.sqlfiddle.com/#!2/7efae/2

+0

唉唉......該死的......笨腦......謝謝你的幫助....這就是我需要...... – Teddy 2013-02-19 09:41:43

+0

答案@ JW正確,我已經編輯了答案。 – GolfWolf 2013-02-19 09:49:18

1

您可以使用子查詢其分別獲得Feb. 2, 2013之前所存在的UserID和子查詢的結果,然後加入回到桌子本身使用LEFT JOIN

SELECT a.* 
FROM tableName a 
     LEFT JOIN 
     (
      SELECT UserID 
      FROM tableName 
      WHERE CreateDate < '2013-02-01' 
     ) b ON a.userID = b.userID 
WHERE a.CreateDate > '2013-02-01' AND 
     b.userID IS NULL 

獲得更快的性能,在userID列中添加INDEX

+0

Yess ....這項工作.....嗯現在哪一個更好地查詢有很多數據的表。我應該在WHERE中使用Left Join還是SubQuery? – Teddy 2013-02-19 09:47:43

+0

如果你已經正確定義了表上的索引,那麼你不必擔心性能。 – 2013-02-19 09:49:56

+0

+1表示鏈接 – GolfWolf 2013-02-19 09:52:26