【问题标题】:How do I join to one row if there are several join matches?如果有多个连接匹配,我如何连接到一行?
【发布时间】:2014-09-24 22:19:00
【问题描述】:

我有 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

【问题讨论】:

标签: sql join


【解决方案1】:

我假设 player_id 和 date 是一个独特的组合。日期不是一个好的列名。我假设您的表名是 player 和 result...将来,请给我们表名,以便答案可以包含它们而不是我的猜测。

构建查询:

(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

希望这对于为您创建语句的逻辑是有意义的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 2017-09-07
    • 2013-01-20
    • 2019-12-10
    • 2014-08-09
    • 2019-04-10
    • 1970-01-01
    相关资源
    最近更新 更多