我需要在表格中查询重复的存款记录,其中在一个现金终端上以相同的金额在特定时间窗口内进行的两次存款被视为重复记录。我现在开始处理一个查询,但我很感激任何有关“正确”执行此操作的建议或建议。
答案 0 :(得分:2)
简单聚合
SELECT
col1, col2, col3, ...
FROM
MyTable
GROUP BY
col1, col2, col3, ...
HAVING
COUNT(*) >= 2
不要包含您的身份/密钥/ PK列:这将是每行唯一的并且使汇总混乱。
要删除或保留一行,请在该
上执行MAX或MINSELECT
col1, col2, col3, ...,
MAX(IDCol) AS RowToDelete,
MIN(IDCol) AS RowToKeep
FROM
MyTable
GROUP BY
col1, col2, col3, ...
HAVING
COUNT(*) >= 2
当然,有3个重复,然后做“保持”。
编辑:
对于时间窗口内的行,请使用自联接或窗口/排名功能
答案 1 :(得分:2)
通常情况下,您要对同一个表进行自我加入,并将您的“重复”条件放在加入条件中。
E.g。
SELECT
*
FROM
Transactions t1
inner join
Transactions t2
on
t1.Terminal = t2.Terminal and
t1.Amount = t2.Amount and
DATEDIFF(minute,t2.TransactionDate,t1.TransactionDate) between 0 and 10 and
t1.TransactionID > t2.TransactionID /* prevent matching the same row */