Sql server 2008 选择联接的第一个匹配项
我有一个SQL语句,它返回如下内容: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 这是由玩家和当前玩家统计数据之间的内部连
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