0

私のデータベースには、という名前のテーブルがありますtalltree_master。最初から去勢されていないレコード( )のみを表示したいtree_no fielddtlastemasフィールドは去勢の日付を追跡し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_no1、2、4、および 6 が表示されます。正しい出力が得られるように where 条件を変更するにはどうすればよいですか。

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

2 に答える 2

0

dtlastemasnull ではないものを持っていなかった nullのレコードが必要です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

于 2013-09-23T16:49:29.277 に答える
0
SELECT tree_no, MAX(dtlastemas)
FROM talltree_master
WHERE MAX(dtlastemas) IS NULL
GROUP BY tree_no
于 2013-09-23T16:49:45.623 に答える