0

私は、目標を達成するためにSQLクエリにロジックを適用する方法を探していました。私はこの時点でどんな提案にもオープンです。

2つのテーブルがあり、それらの間に内部結合があります。2つの表は、すべてのMLB野球選手(過去と現在)の完全なリストであり、すべての殿堂入り選手の表です。行ごとに1人の一意のプレーヤーのクエリ結果を考え出し、殿堂入りしている場合は列にYまたはNを入力することを検討しています。

表1-プレーヤー

ID
HallofFameID
NameFirst
NameLast

表2-HallOfFame

HallofFameID
YearID
Votes
Inducted

各プレイヤーはプレイヤーテーブルに1つのエントリを持っていますが、殿堂入りテーブルにプレイヤー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年までの行を表示せず、1998年を表示してから、Yを付けてミッキーマントルの行に移動したいと思います。選出されました。同じクエリ結果に表示する必要があるホール資格の複数年の名前の横に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*
4

1 に答える 1

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;

SQL フィドルのデモ

これにより、次のことが得られます。

| NAMEFIRST | NAMELAST | HALLOFFAMEID | INDUCTED | YEARID |
-----------------------------------------------------------
|       Don |   Sutton |            1 |        Y |   1998 |
|    Mickey |   Mantle |            2 |        Y |   1974 |
于 2012-12-16T06:25:45.040 に答える