【发布时间】:2022-01-09 01:40:00
【问题描述】:
我在 BigQuery 中工作,我的一个表有一个数组,其中包含我想弄清楚如何删除的重复项。我能够使用 CTE 识别问题行,但实际上删除它们是我卡住的地方。
让我提供一个例子来提供更多的上下文:
| Order | Item.Sku | Item.Quantity | Item.Price | Shipment.Ship_Number |
|---|---|---|---|---|
| 123 | ABC | 2 | 5.99 | UPS123 |
| ABC | 2 | 5.99 | UPS234 | |
| XYZ | 1 | 19.99 | ||
| 456 | ABC | 2 | 5.99 | UPS456 |
| 789 | XYZ | 1 | 19.99 | UPS789 |
因此查看此表(对于代码,将其称为 Order_Table),我只想删除订单 123 的 Item 数组中的第二个“行” - 因为 sku、数量和价格都是相同的。尽管订单 456 和 789 在 Item 数组中具有相同的信息,但它们不被视为重复,因为它们具有不同的订单号。我还包括了一个额外的数组 Shipment,因为我正在处理一个包含多个数组的表,所以我想确保任何解决方案都考虑到这一点。所以在重复删除之后,我想这样结束:
| Order | Item.Sku | Item.Quantity | Item.Price | Shipment.Ship_Number |
|---|---|---|---|---|
| 123 | ABC | 2 | 5.99 | UPS123 |
| XYZ | 1 | 19.99 | UPS234 | |
| 456 | ABC | 2 | 5.99 | UPS456 |
| 789 | XYZ | 1 | 19.99 | UPS789 |
任何想法如何到达那里?如果您有任何问题,请随时提出,我很乐意提供更多背景信息。谢谢!
编辑:这就是我使用 CTE 识别问题行的方式:
select * from
(select item.*
,row_number() over (
partition by
order,
item.sku,
item.quantity,
item.price
order by item.sku)
as row_id
from Order_Table t, t.Item item)
where row_id > 1
【问题讨论】:
-
I'm able to identify the problem rows using a CTE- 显示您的进度,这样我们就不会重复您已经完成的工作
标签: sql arrays google-bigquery duplicates