Sql 如何选择在过去7天内未下订单的客户
我想找出过去七天内没有下订单的客户。基本上我有三张桌子:客户、订单和服务台代理 我想找出获取这些信息的最佳方法 SQL bellow检索客户信息、服务台代理111和每个客户订单的最后日期:Sql 如何选择在过去7天内未下订单的客户,sql,firebird,Sql,Firebird,我想找出过去七天内没有下订单的客户。基本上我有三张桌子:客户、订单和服务台代理 我想找出获取这些信息的最佳方法 SQL bellow检索客户信息、服务台代理111和每个客户订单的最后日期: SELECT DISTINCT customers.customer_id, customers.customer_name, agents.help_desk_agent, Max(orders.order
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
我想以某种方式筛选过去七天内未下订单的客户。尝试在查询的和处添加以下内容:
having max(orders.order_date) < dateadd(day, -7, getdate())
尝试在查询的和处添加以下内容:
having max(orders.order_date) < dateadd(day, -7, getdate())
你可以试试看
Datediff(dd,<datecolumn>,getdate())
作为条件。您可以尝试
Datediff(dd,<datecolumn>,getdate())
作为一个条件。您想要的查询应该如下所示:
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\u id。
不需要使用select distinct。
左联接是不必要的,因为假定客户至少有一个订单,并且您需要与代理表匹配。
您不需要agent表,因为您需要的信息在customer表中。
所需的查询应如下所示:
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\u id。
不需要使用select distinct。
左联接是不必要的,因为假定客户至少有一个订单,并且您需要与代理表匹配。
您不需要agent表,因为您需要的信息在customer表中。
您能给我们展示一下您的表结构吗?您能给我们展示一下您的表结构吗?虽然这肯定会起作用,但它会在分组结果的每一行上执行Datediff函数。Dragan的答案是每行只执行一次dateadd。从性能角度来看,我同意。我的错。谢谢你给我的小费!虽然这肯定会起作用,但它会对分组结果的每一行执行Datediff函数。Dragan的答案是每行只执行一次dateadd。从性能角度来看,我同意。我的错。谢谢你给我的小费!嗨,德拉根,我得到了预期的结果。谢谢!嗨,德拉根,我得到了预期的结果。谢谢!