如何根据 table 的旧条目更新代理键
How can I update a surrogate key based on an older entry of a table
我有一个叫 player_stage 的 table。
我正在尝试准备我的数据,以便将其放入数据仓库。
我目前有一个不可靠的解决方法,涉及重复视图并从重复项中挑选值。
我需要创建一个查询,为重复项提供相同的代理键 (sk)。
知道我该怎么做吗?我一直卡在t
他的 3 天。
如果您使用的是 MySQL 8+,那么 DENSE_RANK
可以在这里工作:
SELECT
PLAYER_ID,
PLAYER_NAME,
DB_SOURCE,
DENSE_RANK() OVER (ORDER BY PLAYER_NAME) SK
FROM yourTable;
上面对 DENSE_RANK
的调用会将相同的 SK
值分配给属于同一玩家名称的所有记录。
如果你使用的是MySQL早于8+的版本,那么我们可以用用户变量模拟密集排名,例如
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;
演示
我有一个叫 player_stage 的 table。 我正在尝试准备我的数据,以便将其放入数据仓库。
我目前有一个不可靠的解决方法,涉及重复视图并从重复项中挑选值。
我需要创建一个查询,为重复项提供相同的代理键 (sk)。
知道我该怎么做吗?我一直卡在t 他的 3 天。
如果您使用的是 MySQL 8+,那么 DENSE_RANK
可以在这里工作:
SELECT
PLAYER_ID,
PLAYER_NAME,
DB_SOURCE,
DENSE_RANK() OVER (ORDER BY PLAYER_NAME) SK
FROM yourTable;
上面对 DENSE_RANK
的调用会将相同的 SK
值分配给属于同一玩家名称的所有记录。
如果你使用的是MySQL早于8+的版本,那么我们可以用用户变量模拟密集排名,例如
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;