1

これはそれほど難しいことではないと思いますが、取得できません。

たとえば、私はテーブルを持っていますT1:

ID    
-----
1000
1001

そして、私はテーブルを持っていますT2:

ID      GROUP  DATE
--------------------------
1000    ADSL   2.2.2012
1000    null   3.2.2012
1000    NOC    4.2.2012
1001    NOC    5.2.2012
1001    null   6.2.2012
1001    TV    7.2.2012

からの値T1を持つ行のみから選択したいのですが、グループが の最小値の場合に限ります。GROUPNOCT2NOCDATET2

したがって、この場合の私の結果は1001、最小DATEの 5.2.2012 グループがNOC!

結合は必要ありません。また、ID ( where id=1000 or id=1001) にデフォルト値を使用することはできません。これは、大きなテーブルの例に過ぎないからです。

t1.id = t2.idこれを使用している一部のアプリケーションでは、SQL式全体を記述できず、部分的にしか記述できないため、使用できないことも重要です。IDしか使えません。

私は次のようなものを試しました:

select id 
from t1 
where
   id in (select id from t2 
          where group = 'NOC' 
          and date in (select min(date) from t2 
                       where id in (select id from t1) 
                      )
         )

しかし、これはうまくいきません。

少し混乱しているように見えますが、実際には使用できませんwhere t1.id = t2.id

ありがとう

4

3 に答える 3

2

T2.IDが を参照する外部キーである場合、すべての ID は以下からのみ取得できるため、T1.ID実際にはテーブルは必要ありません。T1T2

SELECT o.ID
FROM T2 AS o
WHERE EXISTS (
  SELECT MIN(i.DATE)
  FROM T2 AS i
  WHERE i.ID = o.ID
  HAVING MIN(i.DATE) = o.DATE
)
WHERE o."GROUP" = 'NOC'

しかし、どうしても がT1必要な場合は、上記を次のように変更する必要があります。

SELECT *
FROM T1
WHERE ID IN (
  SELECT o.ID
  FROM T2 AS o
  WHERE o."GROUP" = 'NOC'
    AND EXISTS (
      SELECT MIN(i.DATE)
      FROM T2 AS i
      WHERE i.ID = o.ID
      HAVING MIN(i.DATE) = o.DATE
    )
)
于 2012-06-21T14:29:57.427 に答える
0

これを試して:

select id from t1 where id in
 (select id from t2 where group = 'NOC' and date =
   (select min(date) from t2 where id = t1.id))
于 2012-06-21T06:58:37.930 に答える
0

これを複数のステップで実行できますか?

まず、ID ごとの最小日付を取得するには、次のものが必要です。

select id, peoplegroup, min(date)
from t2
group by id

それはあなたを与えるでしょう

1000    ADSL   2.2.2012
1001    NOC    5.2.2012

このテーブルを t3 と呼びます。

それからする

select id
from t3
where id in (
  select id from t1
)
于 2012-06-21T06:34:34.433 に答える