用于查找重叠客户的SQL子查询

用于查找重叠客户的SQL子查询,sql,postgresql,subquery,metabase,Sql,Postgresql,Subquery,Metabase,我正在编写一个SQL查询,它允许我查找在特定销售日期购买某种产品,然后在不同日期范围内购买不同产品的客户。我想在from子句中使用子查询来搜索第一组客户中的第二组客户,但我遇到了一些问题 我的主要问题是-在子查询中,我连接了几个不同的表。我需要在查询的最后where子句中引用其中的两个连接表。我需要在子查询之外重新联接这些表吗?我尝试将最后一行中的o.“OrderDate”和ol.“SKU”与subq.“OrderDate”和subq.“SKU”进行交换,因为这是我的表别名,但没有成功 我为这个

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

我的主要问题是-在子查询中,我连接了几个不同的表。我需要在查询的最后where子句中引用其中的两个连接表。我需要在子查询之外重新联接这些表吗?我尝试将最后一行中的o.“OrderDate”和ol.“SKU”与subq.“OrderDate”和subq.“SKU”进行交换,因为这是我的表别名,但没有成功

我为这个使用子查询对吗

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';

我想你实际上想要两个查询的交集

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';

请提供样本数据和期望的结果。@GordonLinoff样本数据将包括在6/26和7/3之间购买该品种的人的姓名/电子邮件。然后是9月22日至10月5日期间购买red312的另一批人。理想的结果是获得两类人的姓名和电子邮件这项工作完美无瑕-谢谢!我把事情搞得太复杂了