我正在将我们的项目数据库从 SQL Server 转换为 MySQL,数据库转换已经完成。
我们有如下代码来根据哈希码识别重复记录并将其更新为重复。
MySQL 中的排名函数([ Rank function in MySQL )需要基于年龄的排名,该排名从 1 开始,每条记录递增 1。但对我来说,每个 hascode 的 Rank 应该从 1 开始,并且对于相同的 hascode 加 1,如果新的 hascode 出现,Rank 应该从 1 开始。
update table set Duplicate=1
WHERE id IN
( SELECT id FROM (
select RANK() OVER (PARTITION BY Hashcode ORDER BY Date asc) R,*
from table )A where R!=1 )
下面是表结构
CREATE TABLE TBL (
id int(11) NOT NULL AUTO_INCREMENT,
FileName varchar(100) DEFAULT NULL,
date datetime DEFAULT NULL,
hashcode varchar(255) DEFAULT NULL,
FileSize varchar(25) DEFAULT NULL,
IsDuplicate bit(1) DEFAULT NULL,
IsActive bit(1) DEFAULT NULL
PRIMARY KEY (`id`)
)
请帮我将此代码迁移到 MYSQL。
最佳答案
您不需要为此逻辑使用枚举。您只想在不是 hashcode
的最小日期的所有内容上设置重复标志:
update table t join
(select hashcode, min(date) as mindate
from table t
group by hashcode
) tt
on t.hashcode = tt.hashcode and t.date > tt.mindate
set t.Duplicate = 1;
关于mysql - MS SQL 到 MYSQL 的 RANK 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31266720/