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行中进行选择,但前提是group是.GROUPNOCT2NOCDATET2

所以我在这种情况下的结果只是1001因为它的最低DATE5.2.2012 Group 是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是外键引用T1.ID,则您实际上并不需要该T1表,因为所有 ID 只能从以下位置获取T2

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

您可以分多个步骤执行此操作吗?

首先,要获得每个 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 回答
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 回答