This commit is contained in:
@@ -1,11 +1,50 @@
|
||||
SELECT
|
||||
player_id,
|
||||
COUNT(*) AS pet_count
|
||||
FROM
|
||||
"player_pet"
|
||||
WHERE
|
||||
(data->>'ID')::INT IN (273, 274) -- 适配JSONB的data字段取id并转整型
|
||||
GROUP BY
|
||||
player_id
|
||||
HAVING
|
||||
COUNT(*) >= 2; -- 筛选出拥有273/274宠物的玩家,可根据需求调整为>=2(同时拥有两者)
|
||||
-- 验证:查询宠物ID为273/274、玩家拥有≥2条且非最早创建的记录(只查不删)
|
||||
WITH player_pet_ranked AS (
|
||||
SELECT
|
||||
id, -- 记录主键ID
|
||||
player_id,
|
||||
(data->>'ID')::INT AS pet_id, -- 便于核对宠物ID
|
||||
"createTime",
|
||||
ROW_NUMBER() OVER (
|
||||
PARTITION BY player_id
|
||||
ORDER BY "createTime" ASC
|
||||
) AS rn
|
||||
FROM "player_pet"
|
||||
WHERE (data->>'ID')::INT IN (273, 274) -- 改为273或274
|
||||
)
|
||||
SELECT *
|
||||
FROM player_pet_ranked
|
||||
WHERE rn > 1 -- rn>1是要删除的记录
|
||||
AND player_id IN (
|
||||
SELECT player_id
|
||||
FROM player_pet_ranked
|
||||
GROUP BY player_id
|
||||
HAVING COUNT(*) >= 2
|
||||
);
|
||||
|
||||
|
||||
|
||||
-- 核心删除:保留每个玩家下273/274宠物中createTime最早的那条,删除其余
|
||||
WITH player_pet_ranked AS (
|
||||
SELECT
|
||||
id, -- 必须取主键ID用于精准删除
|
||||
player_id,
|
||||
ROW_NUMBER() OVER (
|
||||
PARTITION BY player_id
|
||||
ORDER BY "createTime" ASC
|
||||
) AS rn
|
||||
FROM "player_pet"
|
||||
WHERE (data->>'ID')::INT IN (273, 274) -- 关键修改:70→273,274
|
||||
)
|
||||
DELETE FROM "player_pet"
|
||||
WHERE id IN (
|
||||
SELECT id
|
||||
FROM player_pet_ranked
|
||||
WHERE rn > 1 -- 删除非最早的记录
|
||||
AND player_id IN (
|
||||
SELECT player_id
|
||||
FROM player_pet_ranked
|
||||
GROUP BY player_id
|
||||
HAVING COUNT(*) >= 2 -- 仅处理拥有≥2条273/274宠物的玩家
|
||||
)
|
||||
);
|
||||
Reference in New Issue
Block a user