两个表之间的SQL连接,其中MAX在where子句中

时间:2015-02-13 15:50:17

标签: sql db2

table_A列有ID列。

-----
ID
-----
id1
id2
id3
-----

我有另一个table_B latest_sub_id id table_A以及日期。

---------------------------------
ID        SUB_ID     Date
---------------------------------
id1       sub_id_1   2015-01-03
id1       sub_id_2   2015-01-10
id2       sub_id_1   2015-01-02
id2       sub_id_2   2015-01-10
id2       sub_id_2   2015-01-12
id2       sub_id_3   2015-01-15
id3       sub_id_1   2015-01-09
id3       sub_id_2   2015-01-25
---------------------------------

我想在两个表之间编写连接查询,这样我就可以获得SUB_ID上给定ID值的MAX(DATE)值。

结果应为:

 ---------------------------------------------------------------
 ID    SUB_ID
 ---------------------------------------------------------------
 id1   sub_id_2      ---> as 10th Jan is the latest date for id1
 id2   sub_id_3      ---> as 15th Jan is the latest date for id2
 id3   sub_id_2      ---> as 25th Jan is the latest date for id3
 ---------------------------------------------------------------

5 个答案:

答案 0 :(得分:0)

你似乎并不需要第一张桌子。

使用where子句的一种方法是:

select b.*
from tableb b
where not exists (select 1 from tableb b2 where b2.id = b.id and b2.date > b.date);

答案 1 :(得分:0)

我认为这应该会有所帮助。

create table #t (ID varchar(5), sub_id varchar(20), itemDate date)

insert into #t VALUES ('id1','sub_id_1','2015-01-03')
,('id1','sub_id_2','2015-01-10')
,('id2','sub_id_1','2015-01-02')
,('id2','sub_id_2','2015-01-10')
,('id2','sub_id_2','2015-01-12')
,('id2','sub_id_3','2015-01-15')
,('id3','sub_id_1','2015-01-09')
,('id3','sub_id_2','2015-01-25')


select #t.id, sub_id,itemdate from #t inner join (select id,max(itemdate) latest from #t group by id) grouped
on #t.ID = grouped.ID and itemdate = latest

答案 2 :(得分:0)

我会尝试这样的事情:

select aaa.id, bbb.id, ....
from tableA aaa Left outer join tableB bbb on aaa.id = bbb.id AND (bbb.id, bbb.subId, bbb.Date) IN (select id, subId, MAX(Date) from tableB group by id, subId)
where ....

答案 3 :(得分:0)

嵌套查询是一种可行的方法。不需要WHERE条款。

SELECT ID, SUB_ID, Date
FROM table_B tb
INNER JOIN
    (SELECT ID, MAX(Date) as 'Date'
    FROM table_B
    GROUP BY ID) as t
ON tb.ID = t.ID AND tb.Date = t.Date

MAX函数也不适合WHERE子句的语法。

您可以在此答案中找到更多内容:SQL - Using MAX in a WHERE clause

答案 4 :(得分:0)

尝试......

SELECT A.ID, B.SUB_ID, B.Date FROM table_A AS A
INNER JOIN table_B AS B ON (B.ID = A.ID)
INNER JOIN (
SELECT DISTINCT ID, MAX(Date) AS 'MaxDate' FROM table_B
GROUP BY ALL ID
HAVING COUNT(ID) = 1
) AS MX ON (MX.ID = B.ID AND MX.[MaxDate] = B.Date)