SQL子查询来查找重叠的客户

问题描述

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

我的主要问题是-在子查询中,我加入了几个不同的表。我需要在查询的最终where子句中引用这些连接表中的2个。我是否需要在子查询之外重新加入那些表?我尝试在最后一行中用subq。“ order date”和subq。“ sku”交换o。“ OrderDate”和ol。“ 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."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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...