43 lines
1.0 KiB
SQL
43 lines
1.0 KiB
SQL
-- 清理数据库重复数据
|
|
|
|
-- 1. 清理 positions 表的重复数据
|
|
-- 保留每个 (body_id, time) 组合的最新一条记录
|
|
|
|
WITH duplicates AS (
|
|
SELECT id,
|
|
ROW_NUMBER() OVER (
|
|
PARTITION BY body_id, time
|
|
ORDER BY created_at DESC
|
|
) as rn
|
|
FROM positions
|
|
)
|
|
DELETE FROM positions
|
|
WHERE id IN (
|
|
SELECT id FROM duplicates WHERE rn > 1
|
|
);
|
|
|
|
-- 2. 清理 nasa_cache 表的重复数据
|
|
-- 保留每个 cache_key 的最新一条记录
|
|
|
|
WITH duplicates AS (
|
|
SELECT id,
|
|
ROW_NUMBER() OVER (
|
|
PARTITION BY cache_key
|
|
ORDER BY created_at DESC
|
|
) as rn
|
|
FROM nasa_cache
|
|
)
|
|
DELETE FROM nasa_cache
|
|
WHERE id IN (
|
|
SELECT id FROM duplicates WHERE rn > 1
|
|
);
|
|
|
|
-- 3. 验证清理结果
|
|
SELECT 'Positions duplicates check' as check_name,
|
|
COUNT(*) - COUNT(DISTINCT (body_id, time)) as duplicate_count
|
|
FROM positions
|
|
UNION ALL
|
|
SELECT 'NASA cache duplicates check' as check_name,
|
|
COUNT(*) - COUNT(DISTINCT cache_key) as duplicate_count
|
|
FROM nasa_cache;
|