我有一个SQL服务器表,其中包含4个相关列user (varchar), time (datetime), datestamp (datetime), deleted (bool).
此表有一些行,其中用户和时间是其他行的副本,我正在尝试编写一个查找所有这些重复的查询,并且在找到重复的位置设置除了该行之外的所有行上的已删除标志使用最新的日期戳。
到目前为止,我已经使用
获得了临时表中所有重复用户+次数的列表SELECT user, time into temp_duplicates from table where deleted = 0
GROUP BY user, time
HAVING COUNT(*) > 1
现在正在寻找一种方法,将每行的最新版本与该行的任何其他副本分开。
答案 0 :(得分:1)
无需创建临时表。 它可以通过这样的更新查询来解决:
update table set deleted = 1 where
deleted = 0 and
exists (select * from table t2 where t2.user = table.user
and t2.time = table.time and t2.datestamp > table.datestamp)
它使用较新的用户/时间行在所有行上设置已删除的标志。