我一直在寻找如何在SQL查询中应用逻辑来实现我的目标。我现在对任何建议持开放态度。
我有两个表,我之间有一个内连接。这两张桌子是所有MLB棒球运动员(过去和现在)的完整列表,以及所有名人堂球员的表格。我希望得到每行一个独特玩家的查询结果,并且如果他们在名人堂中有一个用Y或N填充的列。
表1 - 玩家
ID
HallofFameID
NameFirst
NameLast
表2 - HallOfFame
HallofFameID
YearID
Votes
Inducted
每个玩家在玩家表中都有一个条目,但可以在名人堂表中多次输入他们的玩家ID。在我的结果查询中使用内部联接将拉出看起来像这样的行......
Player ID | NameFirst | NameLast | YearID | Votes | Inducted
001........| Don.........| Sutton......| 1992.....| 100.....| N
001........| Don.........| Sutton......| 1993.....| 89......| N
001........| Don.........| Sutton......| 1994.....| 100.....| N
001........| Don.........| Sutton......| 1998.....| 341.....| Y
002........| Mickey......| Mantle......| 1974.....| 341.....| Y So forth...
我希望我的结果查询不显示1992-1997中Don Sutton未被选出的行,但只显示1998年,然后用Y移动到Mickey Mantle行。还有其他玩家谁没有当选,他们的名字旁边有一个N,我需要在同一查询结果中显示霍尔资格多年。
我已将我的工作SQL包含在内以供参考。我不是在寻找任何人来编写我的SQL,而是指向我正确的方向,使用关键字或我可能缺少的逻辑。 提前致谢
Select DISTINCT
Master.namefirst,
Master.nameLast,
Master.HofID,
HallOfFame.inducted,
HallOfFame.yearid
FROM
HallOfFame
INNER JOIN
Master On HallOfFame.hofID = Master.hofID
Group by
Master.nameFirst,
Master.nameLast,
Master.PlayerID,
Master.hofID,
HallOfFame.inducted,
HallOfFame.yearid*
答案 0 :(得分:0)
请改为尝试:
SELECT
m.namefirst,
m.nameLast,
m.HallofFameID,
h1.inducted,
h1.yearid
FROM HallOfFame h1
INNER JOIN
(
SELECT PlayerID, MAX(YearID) LatestYear
FROM HallOfFame
GROUP BY PlayerID
) h2 ON h1.PlayerID = h2.PlayerID AND h1.YearID = h2.LatestYear
INNER JOIN players m On h1.PlayerId = m.Id;
这会给你:
| NAMEFIRST | NAMELAST | HALLOFFAMEID | INDUCTED | YEARID |
-----------------------------------------------------------
| Don | Sutton | 1 | Y | 1998 |
| Mickey | Mantle | 2 | Y | 1974 |