2013-09-23 158 views
0

在我的數據庫中有一個名爲talltree_master的表。我只想顯示那些從開始就沒有刪除的記錄(tree_no field)。 dtlastemas字段記錄了刪除日期,talltree_id是表talltree_master的主鍵。 例如。考慮以下數據如何根據日期顯示數據?

tree_no | talltree_id |dtlastemas 

1  |  1  | 2008-01-09     
2  |  2  |     
3  |  3  | 2010-05-06 
4  |  4  |      
1  |  5  |    
5  |  6  | 2001-02-06 
2  |  7  | 2009-05-03     
3  |  8  | 2010-01-01   
6  |  9  |    

注意:空白意味着特定的樹在去雄完成時並未被去雄。 我想顯示的只是tree_no 4和6,因爲這些是從tree_no 1和2之前被去掉的開始處未被去掉的唯一樹。 但下面的查詢顯示tree_no 1,2,4和6.我如何修改條件,以便我會得到正確的輸出。

string query = "select tree_no from talltree_master"; 
     query += " where dtlastemas is NULL"; 
+0

http://dev.mysql.com/doc/refman/5.0/en/any-in-some-subqueries.html閱讀本應該讓你想要你想我猜 – BobClaerhout

+0

如果這實際上是你的數據,你的查詢不符合你的樣本。該表中的值實際上是NULL還是空字符串或兩者都是?這會在您需要的查詢中發揮作用。 – Matt

+0

@Matt:是的,但這不是問題。這只是在stackoverflow上的可視化... – BobClaerhout

回答

0

你想那些記錄,dtlastemas爲空,從來沒有過一個dtlastemas,這不是空。事情是這樣的:

select tree_no 
from talltree_master o 
where o.dtlastemas is null 
    and not exists (
     select * 
     from talltree_master i 
     where i.tree_no = o.tree_no 
       and dtlastemas is not null) 

SQL小提琴:http://sqlfiddle.com/#!3/371db/6

0
SELECT tree_no, MAX(dtlastemas) 
FROM talltree_master 
WHERE MAX(dtlastemas) IS NULL 
GROUP BY tree_no