SQL 查找重叠客户的子查询

SQL subquery to find overlapping customers

我正在编写一个 SQL 查询,它可以让我找到在特定销售日期购买了某种产品然后随后在不同日期范围内购买了不同产品的客户。我想在 from 子句中使用子查询在第一组客户中搜索第二组客户,但我遇到了一些问题

我的主要问题是-在子查询内部我加入了几个不同的table。我需要在查询的最后一个 where 子句中引用那些加入 table 的 2 个。我需要重新加入子查询之外的那些 table 吗?我尝试在最后一行中将 o."OrderDate" 和 ol."SKU" 与 subq."order date" 和 subq."sku" 交换,因为那是我的 table 别名,但没有任何运气那。

我可以为此使用子查询吗?

SELECT DISTINCT subq."FirstName", subq."LastName", subq."Email"
FROM (
    SELECT DISTINCT o."FirstName", o."LastName", o."Email"
    FROM flight_export_order o
    JOIN flight_export_orderline ol
        ON o."OrderDisplayID" = ol."OrderDisplayID"
    JOIN flight_export_product p
        ON ol."SKU" = p."SKU"
    JOIN full_consultant_info fci
        ON o."ConsultantDisplayID" = fci."ConsultantDisplayID"
    WHERE p."DisplayName" LIKE '%varietal%'
        AND o."OrderDate" BETWEEN '06/26/2020' AND '07/03/2020'
) AS subq
WHERE o."OrderDate" BETWEEN '09/22/2020' AND '10/05/2020' AND ol."SKU" = 'Red312';

我认为您实际上想要 2 个查询的交集...

SELECT DISTINCT o."FirstName", o."LastName", o."Email"
FROM flight_export_order o
JOIN flight_export_orderline ol
ON o."OrderDisplayID" = ol."OrderDisplayID"
JOIN flight_export_product p
ON ol."SKU" = p."SKU"
JOIN full_consultant_info fci
ON o."ConsultantDisplayID" = fci."ConsultantDisplayID"
WHERE p."DisplayName" LIKE '%varietal%'
AND o."OrderDate" BETWEEN '06/26/2020' AND '07/03/2020'
INTERSECT
SELECT DISTINCT o."FirstName", o."LastName", o."Email"
FROM flight_export_order o
JOIN flight_export_orderline ol
ON o."OrderDisplayID" = ol."OrderDisplayID"
JOIN flight_export_product p
ON ol."SKU" = p."SKU"
JOIN full_consultant_info fci
ON o."ConsultantDisplayID" = fci."ConsultantDisplayID"
WHERE o."OrderDate" BETWEEN '09/22/2020' AND '10/05/2020' 
AND ol."SKU" = 'Red312';

Learn more about set operators like UNION, UNION ALL, INTERSECT and EXCEPT