Я пытаюсь отфильтровать некоторые записи из запроса BigQuery, используя WHERE NOT IN
, однако получаю одинаковое количество результатов с этим кодом или без него, и мои необходимые исключения все еще включены.
Вот мой запрос:
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)
Мое второе предложение НЕТ должно удалить еще 293 заказа из общей суммы, но эти номера заказов все еще присутствуют.Если я закомментирую эти два предложения WHERE, я получу одинаковое количество результатов, поэтому ясно, что заказы, которые они возвращают, не исключаются, что я упускаю в своем коде, чтобы исключить эти записи?