如何基于表的旧条目更新代理键

我有一个名为player_stage的表。 我正在尝试准备数据,以便可以将其放入数据仓库中。

我目前有一个不可靠的解决方法,其中涉及重复视图并从重复中手动选择值。

我需要创建一个查询,为重复项提供相同的代理键(sk)。

有人知道我该怎么做吗?我一直被困在 他的三天。

如何基于表的旧条目更新代理键

an_day 回答:如何基于表的旧条目更新代理键

如果您使用的是MySQL 8+,那么DENSE_RANK可以在这里工作:

SELECT
    PLAYER_ID,PLAYER_NAME,DB_SOURCE,DENSE_RANK() OVER (ORDER BY PLAYER_NAME) SK
FROM yourTable;

以上对DENSE_RANK的调用将为属于同一玩家名称的所有记录分配相同的SK值。

如果您使用的是早于8+的MySQL版本,那么我们可以使用用户变量来模拟密集排名,例如

SELECT t1.PLAYER_ID,t1.PLAYER_NAME,t1.DB_SOURCE,t2.rn AS SK
FROM yourTable t1
INNER JOIN
(
    SELECT PLAYER_NAME,@rn := @rn + 1 AS rn
    FROM (SELECT DISTINCT PLAYER_NAME FROM yourTable) t,(SELECT @rn := 0) r
    ORDER BY PLAYER_NAME
) t2
    ON t1.PLAYER_NAME = t2.PLAYER_NAME
ORDER BY
    t1.PLAYER_ID;

演示

本文链接:https://www.f2er.com/3079648.html

大家都在问