【问题标题】:How to select customers that didn't place an order in the last 7 days如何选择过去 7 天内未下订单的客户
【发布时间】:2019-08-29 13:46:53
【问题描述】:

我正在尝试找出过去 7 天内未下订单的客户。基本上我有 3 个表:customers、orders 和 help_desk_agents。

我正在尝试找出获取此信息的最佳方式。

下面的 SQL 检索客户信息,帮助台代理 111 和每个客户的订单的最后日期:

SELECT DISTINCT customers.customer_id, 
                customers.customer_name, 
                agents.help_desk_agent, 
                Max(orders.order_date) 
FROM   customers 
       LEFT JOIN (SELECT DISTINCT customers.customer_id, 
                                  orders.order_date 
                  FROM   orders 
                  GROUP  BY 1, 
                            2) orders2 
              ON customers.customer_id = orders2.customer_id 
       LEFT JOIN help_desk_agents 
              ON customers.help_desk_agent_id = 
                 help_desk_agents.help_desk_agent_id 
WHERE  customer.help_desk_agent_id = 111 
GROUP  BY 1, 
          2, 
          3 

我想以某种方式过滤过去 7 天内未下订单的客户。

【问题讨论】:

  • 你能告诉我们你的表结构吗?

标签: sql firebird


【解决方案1】:

尝试在您的查询中添加此内容:

having max(orders.order_date) < dateadd(day, -7, getdate())

【讨论】:

  • 嗨 Dragan,我得到了预期的结果。非常感谢!
【解决方案2】:

你可以试试

Datediff(dd,<datecolumn>,getdate())

并使用

>= 7 

作为条件。

【讨论】:

  • 虽然这肯定行得通,但它会在每一行(分组结果的)上执行Datediff 函数。 Dragan 的答案每行只执行一次dateadd
  • 性能方面我同意。我的错。谢谢你给我的小费!
【解决方案3】:

您想要的查询应该如下所示:

SELECT c.customer_id, c.customer_name, a.help_desk_agent, 
                Max(orders.order_date) 
FROM customers c JOIN
     (SELECT o.customer_id, MAX(o.order_date) as max_order_date
      FROM orders o
      GROUP BY o.customer_id
     ) o 
     ON c.customer_id = o.customer_id 
WHERE c.help_desk_agent_id = 111 AND
      o.max_order_date < dateadd(day, -7, getdate());

您的查询有多个问题:

  • 在子查询中不理解别名customers.customer_id
  • select distinct 是不必要的。
  • LEFT JOIN 是不必要的,因为可能客户至少有一个订单,而您需要与代理表匹配。
  • 您不需要代理表,因为您想要的信息在customer 表中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-12
    • 2020-04-02
    • 2017-07-05
    • 1970-01-01
    相关资源
    最近更新 更多