更新所有但最新的重复行

时间:2015-10-28 18:37:53

标签: mysql

我有一个表,其中有一个用户标识符(不唯一,因为同一个用户可以有2个条目)和一个创建日期。我想以某种方式标记除了每个用户的最新副本之外的所有副本

实施例 用户日期

1    | oct 5
2    | oct 7
3    | oct 6
1    | oct 6

在此示例中,对应于用户1 oct 5的行应该更新一些值。有没有一种简单的方法可以做到这一点?

1 个答案:

答案 0 :(得分:1)

您需要在表格中添加某种标记:

alter table example add column IsNewest int default 1;

然后您可以将其更新为:

update example e left join
       (select user, max(date) as maxd
        from example
        group by user
       ) eu
       on e.user = eu.user and e.date = eu.maxd
    set IsNewest = 0
    where eu.date is null;

当然,为了使其保持最新,您需要触发插入,删除和更新。从表中获取行时,进行计算可能更简单。