我正在尝试使用WHERE NOT IN
从BigQuery查询中过滤掉一些记录,但是,无论是否使用此代码,我得到的结果数量都是相同的,并且仍包含我所要求的排除项。
这是我的查询:
SELECT
EmailHash,
DATE(MAX(OrderDate)) AS max_ord_date
FROM `project.dataset.Header`
WHERE Date(OrderDate) = '2019-05-15'
# AND mb_company = 'CORE'
AND CancelledFlag IS NOT True
AND AmountPaid > 0
# Exclude these order numbers
AND ordernumber NOT IN (
SELECT ordernumber FROM(
SELECT
ordernumber,
SUM(SAFE_CAST(StockOutQuantity AS INT64)) AS so,
SUM(QuantityCancelled) AS cx,
SUM(Quantity) AS ord
FROM `project.dataset.Detail`
WHERE Date(OrderDate) = '2019-05-15'
GROUP BY ordernumber
HAVING so = ord)
)
# Exclude these order numbers
AND ordernumber NOT IN (
SELECT ordernumber FROM(
SELECT
ordernumber,
SUM(AmountPaid) ap,
ROUND(SUM(AmountPaid) - (SUM(PnPOrder) + SUM(PnPOrderTax)),2) ap_ntx,
SUM(RefundedValue) rv,
SUM(GoodsNet) gn
FROM `project.dataset.Header`
WHERE Date(OrderDate) = '2019-05-15'
GROUP BY ordernumber
HAVING (ap = rv) OR (ap_ntx = rv) OR (gn = rv)
)
)
GROUP BY EmailHash
运行此查询将返回10802个结果。
当我在下面运行SQL时,我看到17条订单,这些订单应从总结果中排除。
SELECT ordernumber FROM(
SELECT
ordernumber,
SUM(SAFE_CAST(StockOutQuantity AS INT64)) AS so,
SUM(QuantityCancelled) AS cx,
SUM(Quantity) AS ord
FROM `project.dataset.Detail`
WHERE Date(OrderDate) = '2019-05-15'
GROUP BY ordernumber
HAVING so = ord)
我的第二个NO子句应该从总数中删除另外293个订单,但是这些订单号仍然存在。如果我注释掉这两个WHERE子句,则会得到相同数量的结果,因此很明显,不排除它们返回的顺序,我在代码中缺少哪些排除这些记录的信息?
答案 0 :(得分:1)
您可能正在寻找订单号的查询之间的非联盟方式
<input formControlName="field" pInputText appValidate>