如何将Row_number与公用表表达式查询转换为Mysql

时间:2016-11-14 07:48:29

标签: mysql sql-server-2008 database-migration common-table-expression row-number

以下查询在窗口函数和公用表表达式中包含带ROW_NUMBER()的SQL:

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中运行?

1 个答案:

答案 0 :(得分:1)

使用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或类似内容。如果没有基于时间的列,请使用任何不同的列。如果所有列都相同,则您需要进行清洗。