选择行的最新版本

时间:2014-03-18 12:06:51

标签: sql sql-server

我有一个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 

现在正在寻找一种方法,将每行的最新版本与该行的任何其他副本分开。

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)

它使用较新的用户/时间行在所有行上设置已删除的标志。