如何将使用普通 table 表达式查询的 Row_number 转换为 Mysql

How to Convert Row_number with Common table expression query to Mysql

以下查询包含 SQL 和 ROW_NUMBER() 一个窗口函数和一个常见的 table 表达式:

WITH numbered AS (
  SELECT ROW_NUMBER() OVER (
    PARTITION BY master_id, Report_id
    ORDER BY master_id, Report_id
  ) AS _dupe_num 
  FROM #tradePositionFilterInfo
  WHERE 1=1
)
DELETE FROM numbered
WHERE _dupe_num > 1

如何将其转换为在 MySQL 中工作?

使用mysql的多表删除语法:

delete a
from #tradePositionFilterInf a, #tradePositionFilterInf b
where a.master_id = b.master_id
and a.Report_id = b.Report_id
and a.id > b.id

最后一行是关键。我选择了 id 列来打破平局,假设会有这样一个列。如果不是,请使用 timestamp 或类似的。如果没有基于时间的列,请使用任何不同的列。如果所有列都相同,则说明您已完蛋。