mysql - MS SQL 到 MYSQL 的 RANK 转换

标签 mysql sql-server

我正在将我们的项目数据库从 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/

相关文章:

sql-server - 您如何确保新索引不会减慢查询速度?

c# - SSMS 中的网格控件

mysql - MYSQL使用LEFT OUTER Join查找多个表的字段求和

MySQL select order by contains num

php - 使用 PHP 将 HTML 表单数据插入 MySQL

c# - 多次调用 con.execute() 是否重要?

MySQL 使用 BETWEEN 子句返回错误结果

php - 获取所选列的总和

c# - 将现有数据库链接到 Entity Framework

sql-server - 在sql server 2008中创建新数据库时,自动创建了一些表?