BigQuery SQL'NOT IN'不排除结果

时间:2019-05-17 09:24:30

标签: sql google-bigquery

我正在尝试使用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子句,则会得到相同数量的结果,因此很明显,不排除它们返回的顺序,我在代码中缺少哪些排除这些记录的信息?

1 个答案:

答案 0 :(得分:1)

您可能正在寻找订单号的查询之间的非联盟方式

<input formControlName="field" pInputText appValidate>