Sql server 2008 选择联接的第一个匹配项

Sql server 2008 选择联接的第一个匹配项,sql-server-2008,Sql Server 2008,我有一个SQL语句,它返回如下内容: PLAYER_ID | PLAYER_NAME | POSITION | 1 player1 hitter 1 player1 short stop 1 player1 pitcher 2 player2 pitcher 2 player2 catcher 这是由玩家和当前玩家统计数据之间的内部连

我有一个SQL语句,它返回如下内容:

PLAYER_ID | PLAYER_NAME | POSITION | 
1           player1       hitter
1           player1       short stop
1           player1       pitcher
2           player2       pitcher
2           player2       catcher
这是由玩家和当前玩家统计数据之间的内部连接完成的

SELECT P.PLAYER_ID, P.PLAYER_NAME, S.POSITION
FROM PLAYERS AS P
INNER JOIN CURRENT_PLAYER_STATS AS S
ON P.PLAYER_ID = S.PLAYER_ID
WHERE P.PLAYER_ID = <some player id>

i、 e.每个玩家的最上面一行。

提供的信息有限,让我们试试看

;WITH Vals AS (
    SELECT    Player_ID, 
              Player_Name, 
              Position, 
              ROW_NUMBER() OVER(PARTITION BY Player_ID ORDER BY [Columns Here]) as RowID
    FROM YourTable
)
SELECT *
FROM Vals 
WHERE RowID = 1

如果显示正在使用的SQL,可能会得到一些响应。“顶行”是什么意思?(例如,最近的、最大/最小的Id)您如何确定哪一行是每个玩家的第一行?您将如何决定从加入中选择哪一条记录??您是希望每个玩家都有一条记录,还是选择您在所需输出中显示的这两条记录的逻辑是什么?@w0lf它将是最新的统计数据。该字段仅基于日期(而不是日期时间)因此,两个统计数据有可能有相同的日期。因此,本质上,你在做什么,给每一行分配一个行号,然后只选择数字为1的行?是的,这是正确的。请注意
划分和
排序,因为这将确定行号何时重置,以及以何种顺序重置
;WITH Vals AS (
    SELECT    Player_ID, 
              Player_Name, 
              Position, 
              ROW_NUMBER() OVER(PARTITION BY Player_ID ORDER BY [Columns Here]) as RowID
    FROM YourTable
)
SELECT *
FROM Vals 
WHERE RowID = 1