Files
FT363-INTERFACE/sql/query_duplicate_records.sql
2025-11-17 16:51:34 +08:00

88 lines
2.3 KiB
SQL
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- 查询重复记录的SQL语句集合
-- 适用于SQL Server数据库
-- 1. 查询stockin表中stockin_id重复的记录
-- 显示重复的stockin_id及其出现次数
SELECT
stockin_id,
COUNT(*) as duplicate_count
FROM stockin
GROUP BY stockin_id
HAVING COUNT(*) > 1
ORDER BY duplicate_count DESC;
-- 2. 查询stockin表中stockin_id重复的详细记录
-- 显示所有重复记录的完整信息
SELECT
s1.*
FROM stockin s1
INNER JOIN (
SELECT stockin_id
FROM stockin
GROUP BY stockin_id
HAVING COUNT(*) > 1
) s2 ON s1.stockin_id = s2.stockin_id
ORDER BY s1.stockin_id, s1.create_date DESC;
-- 3. 查询stockin表中除了最新记录外的重复记录(用于删除重复数据)
-- 基于create_date字段保留最新的记录
WITH RankedRecords AS (
SELECT
*,
ROW_NUMBER() OVER (PARTITION BY stockin_id ORDER BY create_date DESC) as rn
FROM stockin
)
SELECT
stockin_guid,
stockin_id,
create_date,
rn as record_rank
FROM RankedRecords
WHERE rn > 1 -- 显示除最新记录外的重复记录
ORDER BY stockin_id, create_date DESC;
-- 4. 通用模板:查询任意表的重复记录
-- 使用示例:将table_name和column_name替换为实际的表名和字段名
/*
SELECT
column_name,
COUNT(*) as duplicate_count
FROM table_name
GROUP BY column_name
HAVING COUNT(*) > 1
ORDER BY duplicate_count DESC;
*/
-- 5. 查询多个字段组合的重复记录
-- 示例:查询stockin表中stockin_id和asn组合重复的记录
SELECT
stockin_id,
asn,
COUNT(*) as duplicate_count
FROM stockin
GROUP BY stockin_id, asn
HAVING COUNT(*) > 1
ORDER BY duplicate_count DESC;
-- 6. 删除重复记录的SQL(谨慎使用,建议先备份数据)
-- 保留最新的记录,删除旧的重复记录
/*
WITH RankedRecords AS (
SELECT
stockin_guid,
ROW_NUMBER() OVER (PARTITION BY stockin_id ORDER BY create_date DESC) as rn
FROM stockin
)
DELETE FROM stockin
WHERE stockin_guid IN (
SELECT stockin_guid
FROM RankedRecords
WHERE rn > 1
);
*/
-- 注意事项:
-- 1. 在执行删除操作前,请务必备份数据
-- 2. 建议先在测试环境中验证SQL语句的正确性
-- 3. 可以根据实际业务需求调整排序字段和保留策略
-- 4. 对于大表,建议分批处理以避免锁表时间过长