我想这不是那么难,但我无法得到它。
例如我有表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
NOC
值为T2
的行NOC
,但仅限于DATE
组的最小值T2
{1}}中的{1}}值。
所以我在这种情况下的结果只有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
由于
答案 0 :(得分:2)
如果T2.ID
是引用T1.ID
的外键,则您实际上不需要T1
表,因为所有ID都只能从T2
获取:< / p>
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
)
)
答案 1 :(得分: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
)
答案 2 :(得分: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))