如何在SQL Server中按播放器获取第二行值并将其插入其他表中



如何在SQL Server中按播放器获取第二行值并将其插入其他表中。

例如,我将有这样的表格:

PlayerId   VIpLevel  StartDate 
1          1         2000-01-01 00:10 
1          4         2001-01-01 00:10 
1          5         2001-01-11 00:10 
2          1         2000-01-01 00:10 
2          3         2000-01-02 00:10
2          7         2000-05-02 00:10

所以我想通过StarDate DESC为玩家1和玩家2获得他们的第二个VipLevel订单。

到目前为止,我找到了这个,但这对我来说并不好

UPDATE #Results
SET [PreviousVIPLevel] = (
SELECT
ROW_NUMBER() OVER(ORDER BY StartDate DESC) AS RowNum,
PlayerId,
VIPLevelId
FROM #table
)  foo
WHERE RowNum =2 

我假设你的#Results表中有一个playerid,所以你可以用他们的第二高等级更新每个球员的记录。然后,您需要在row_number函数中使用partition by并相应地join

UPDATE A
SET PreviousVIPLevel= B.VIPLevelId
FROM #Results A
JOIN (SELECT
ROW_NUMBER() OVER(PARTITION BY PlayerId ORDER BY StartDate DESC) AS RowNum,
PlayerId,
VIPLevelId
FROM #table
) B ON A.PLayerId = B.PlayerId AND B.RowNum = 2

由于多种原因,当前查询无法正常工作。 首先,不能更新选择多个列的字段。 这就是为什么我改用join。 其次,如果您能够使你的记录工作,它会将所有记录更新为相同的值,因为您缺少partition by子句。

实际上不涉及更新。这是一个插入语句。假设创建了目标表:

WITH CTE AS 
(
SELECT ROW_NUMBER() OVER(PARTITION BY PlayerId ORDER BY StartDate DESC) AS RowNum,
PlayerId,
VIPLevelId
FROM #table
)
INSERT INTO Destination
SELECT * FROM CTE WHERE RowNum = 2

最新更新