Sql 将查找重复项查询转换为删除重复项查询
在Google Big Query中查找表中的重复项对我来说效果非常好Sql 将查找重复项查询转换为删除重复项查询,sql,google-bigquery,Sql,Google Bigquery,在Google Big Query中查找表中的重复项对我来说效果非常好 SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY KeyReport,Analytics,Description,AsOfDate) row_number FROM `corp-analytics.Reports.Metrics` ) WHERE row_number > 1 AND
SELECT *
FROM (
SELECT
*,
ROW_NUMBER()
OVER (PARTITION BY KeyReport,Analytics,Description,AsOfDate)
row_number
FROM `corp-analytics.Reports.Metrics`
)
WHERE row_number > 1 AND AsOfDate IN('01-03-2019','01-17-2019')
我以为我可以把Select*改为Delete,然后运行它来删除重复,但是它抛出了一个错误,关于一个不正确的字符。那不可能是对的。该错误必须归因于其他原因,但我不确定是什么原因。首先,您对ROW_号码的调用非常有意义,因为您从未提供ORDER BY子句。如果没有这一点,您基本上是在告诉BigQuery,您并不真正关心用于确定行号的顺序。除此之外,还有一个查询,您可以尝试删除记录:
DELETE
FROM corp-analytics.Reports.Metrics AS c
WHERE
(SELECT ROW_NUMBER() OVER (PARTITION BY KeyReport, Analytics, Description, AsOfDate
ORDER BY some_column)
FROM corp-analytics.Reports.Metrics AS c2
WHERE d.id = d2.id) = 1 AND
AsOfDate IN ('01-03-2019', '01-17-2019');
这假设存在某些主键或其他唯一键、列id,可用于唯一标识表中的任何记录。如果不存在,那么我们必须使用其他方法关联WHERE子句中的子查询
它抛出了一个关于错误字符的错误。那不可能
对
这完全正确。解析器希望在FROM之后看到表名,而不是看到并抛出一个错误。请参阅Tim Biegeleisen关于如何修改SQL的回答
您可能需要一个存在于其中的: 删除 来自corp-analytics.Reports.Metrics作为c 哪里有 按KeyReport、Analytics、Description和AsOfDate选择分区上的行数 按某列排序 来自corp-analytics.Reports.Metrics作为c2 其中d.id=d2.id=1和
AsOfDate于‘2019年3月1日’、‘2019年1月17日’发布 表中没有唯一的ID。如何修改SQL以解决此问题?另外,我不能删除复制记录吗?不知何故,这是在创建一个名为“Updates”的新表。必须有某种设置来控制这一点,因为我没有明确告诉它这样做。
DELETE [FROM] target_name [alias]
WHERE condition