2014-09-24 74 views
0

我有2张桌子。我想加入一个最新日期加入该球员的方式。从下面的子集中,我希望Adams的加入仅通过平局加入到该行,因为它是最新的日期明智的。当你有多行时,我该如何去做这件事?如果有多个连接匹配,我如何连接到一行?

ID PLAYER 
------------- 
2  Adams 
3  Rogers 
4  David 


PLAYER_ID DATE   RESULT 
------------------------------------ 
2   01/01/2014 Win 
2   01/02/2014 Win 
2   01/03/2014 Loss 
2   01/04/2014 Draw 
+1

是player_ID和Date唯一的组合吗? – Twelfth 2014-09-24 22:21:49

+0

您使用的是什么RDMS? – Arun 2014-09-24 22:21:54

+0

我希望能够基本上按日期加入阵列的MAX。我正在使用postgres。 – KingKongFrog 2014-09-24 22:24:06

回答

1

我假设player_id和日期是一个独特的组合。日期不是一个好的列名称。我认为你的表名是玩家和结果...将来,给我们表名,这样的答案可以包括他们,而不是我的猜测。

构建查询:

(select player_ID, max(date) from table group by player_ID) 

这将选择每个球员的最大日期。我们将使用它作为子查询和内部连接,因此它充当过滤器。请注意,如果player_ID,日期组合不是唯一的,则会为每个玩家带回多行。

Select player, maxdate 
from player p 
inner join (select player_ID, max(date) as maxdate from result group by player_ID) a 
on a.player_ID = p.player_ID 

这会返回给你一个球员和最近的日期。加入回到结果表得到结果

Select player, result 
from player p 
inner join (select player_ID, max(date) as maxdate from result group by player_ID) a 
on a.player_ID = p.player_ID 
inner join result r on r.player_ID = a.player_ID and r.date = a.maxdate 

希望这是有道理的为您创建语句的逻辑。