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

Posted

技术标签:

【中文标题】用于查找重叠客户的 SQL 子查询【英文标题】:SQL subquery to find overlapping customers 【发布时间】:2020-10-07 19:06:40 【问题描述】:

我正在编写一个 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';

【问题讨论】:

请提供样本数据和期望的结果。 @GordonLinoff 样本数据将包括在 6/26 和 7/3 之间购买该品种的人的姓名/电子邮件。然后是另一个在 9/22 到 10/5 之间购买 red312 的人的名单。期望的结果是获得同时属于这两个类别的人的姓名和电子邮件 【参考方案1】:

我认为您实际上想要 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

【讨论】:

这工作完美无缺-谢谢!我把事情复杂化了

以上是关于用于查找重叠客户的 SQL 子查询的主要内容,如果未能解决你的问题,请参考以下文章

需要Tricky sql查询,查找子查询的总和

带有两个子查询/连接的 JPA 标准选择

SQL 语句递归查询 With AS 查找所有子节点

SQL 语句递归查询 With AS 查找所有子节点

第十四章 使用子查询

使用 SQL Server 将子查询结果重用于其他计算