我有一个表,其中有一个用户标识符(不唯一,因为同一个用户可以有2个条目)和一个创建日期。我想以某种方式标记除了每个用户的最新副本之外的所有副本
实施例 用户日期
1 | oct 5
2 | oct 7
3 | oct 6
1 | oct 6
在此示例中,对应于用户1 oct 5的行应该更新一些值。有没有一种简单的方法可以做到这一点?
答案 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;
当然,为了使其保持最新,您需要触发插入,删除和更新。从表中获取行时,进行计算可能更简单。