0

私がこのようなテーブルを持っているとしましょう:

model_id | object_id | date_modified
1        | 123       | NULL
1        | 123       | 2012-12-11 16:55:21
1        | 456       | 2012-12-11 16:52:21
1        | 789       | NULL

変更されていないobject_idsを返したい。これが私がこれまでに試したことです:

SELECT object_id from Table WHERE date_modified IS NULL

これは123と789を返します、私は789だけが欲しいです。

SELECT DISTINCT object_id from Table WHERE date_modified IS NULL

WHEREが結果をフィルタリングした後にDISTINCT句が適用されるため、これも123と789を返します。

単一のクエリでこれを実現する方法はありますか、それとも個別のobject_idのリストを返し、プログラムでループしてフィルタリングする必要がありますか?

4

3 に答える 3

2
SELECT object_id from Table GROUP BY object_id HAVING MAX(date_modified) IS NULL
于 2012-12-12T01:58:29.540 に答える
0

クエリ:

SQLFIDDLEExample

SELECT DISTINCT t.object_id 
from Table1 t
WHERE t.object_id NOT IN (SELECT t1.object_id 
                          FROM Table1 t1
                          WHERE t1.date_modified IS NOT NULL)

結果:

| OBJECT_ID |
-------------
|       789 |
于 2012-12-12T17:54:23.287 に答える
0

ネストされたクエリが役立ちます。内側のクエリは変更されたすべてのobject_idを選択し、次に外側のクエリはnullの日付を持つがobject_idが変更されたリストにないすべてのレコードを選択します。

SELECT object_id FROM table
  WHERE date_modified IS NULL AND object_id NOT IN (
    SELECT object_id FROM table
      WHERE date_modified IS NOT NULL
  )
于 2012-12-12T01:52:21.670 に答える