Sql 在一个没有';不存在于另一个世界
下面的查询可以工作,但我想稍微修改一下 实际上,它从customer表中选择所有不在此文件中的前一个函数(因此为'NOT in($dealerNum')中的数组中的客户。它对所有其他客户运行查询,如果他们在过去6个月之前的12个月内有订单,则检索他们的编号(我在一个18个月的窗口中工作) 我需要对此稍作更改。我仍然希望对不在前一个数组中的任何客户运行此操作。但是,我希望检索在过去6个月内有订单但不是在此之前12个月内有订单的任何客户的数量。基本上显示他们至少在当年/12个月内处于活动状态,并且在过去6个月内处于活动状态协 希望这是有意义的。这是现有的查询,我只是不确定修改我的何处处理它的最佳/最合理的方法Sql 在一个没有';不存在于另一个世界,sql,db2,Sql,Db2,下面的查询可以工作,但我想稍微修改一下 实际上,它从customer表中选择所有不在此文件中的前一个函数(因此为'NOT in($dealerNum')中的数组中的客户。它对所有其他客户运行查询,如果他们在过去6个月之前的12个月内有订单,则检索他们的编号(我在一个18个月的窗口中工作) 我需要对此稍作更改。我仍然希望对不在前一个数组中的任何客户运行此操作。但是,我希望检索在过去6个月内有订单但不是在此之前12个月内有订单的任何客户的数量。基本上显示他们至少在当年/12个月内处于活动状态,并且在
SELECT c.customerNumber
FROM Customers C
INNER JOIN Orders G ON C.CustomerNumber = G.Customer
WHERE c.customerNumber NOT IN ($dealerNum)
AND C.date BETWEEN CURRENT_DATE - 18 MONTHS AND CURRENT_DATE - 6 MONTHS
GROUP BY C.customerNumber
HAVING COUNT(*) > 0
我会这样写
SELECT c.customerNumber
FROM Customers C
WHERE c.customerNumber NOT IN ($dealerNum)
AND c.customerNumber IN (SELECT Customer FROM Orders where Date BETWEEN CURRENT_DATE - 6 MONTHS AND CURRENT_DATE )
AND c.customerNumber NOT IN (SELECT Customer FROM Orders where Date BETWEEN CURRENT_DATE - 18 MONTHS AND CURRENT_DATE - 6 MONTHS)
你的意思是
C.date
我希望日期来自Orders
表-即orderDate啊是的,很抱歉你写得很清楚,尽管它确实需要对OrdersWell进行两次表扫描,这取决于你在Orders-date列上的索引。查看访问计划。另一个答案是将Orders
表中的所有行分组,这样可能会比我怀疑的版本慢
SELECT c.customerNumber
FROM Customers C
WHERE c.customerNumber NOT IN ($dealerNum)
AND c.customerNumber IN (SELECT Customer FROM Orders where Date BETWEEN CURRENT_DATE - 6 MONTHS AND CURRENT_DATE )
AND c.customerNumber NOT IN (SELECT Customer FROM Orders where Date BETWEEN CURRENT_DATE - 18 MONTHS AND CURRENT_DATE - 6 MONTHS)