Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在一个没有';不存在于另一个世界_Sql_Db2 - Fatal编程技术网

Sql 在一个没有';不存在于另一个世界

Sql 在一个没有';不存在于另一个世界,sql,db2,Sql,Db2,下面的查询可以工作,但我想稍微修改一下 实际上,它从customer表中选择所有不在此文件中的前一个函数(因此为'NOT in($dealerNum')中的数组中的客户。它对所有其他客户运行查询,如果他们在过去6个月之前的12个月内有订单,则检索他们的编号(我在一个18个月的窗口中工作) 我需要对此稍作更改。我仍然希望对不在前一个数组中的任何客户运行此操作。但是,我希望检索在过去6个月内有订单但不是在此之前12个月内有订单的任何客户的数量。基本上显示他们至少在当年/12个月内处于活动状态,并且在

下面的查询可以工作,但我想稍微修改一下

实际上,它从customer表中选择所有不在此文件中的前一个函数(因此为'NOT in($dealerNum')中的数组中的客户。它对所有其他客户运行查询,如果他们在过去6个月之前的12个月内有订单,则检索他们的编号(我在一个18个月的窗口中工作)

我需要对此稍作更改。我仍然希望对不在前一个数组中的任何客户运行此操作。但是,我希望检索在过去6个月内有订单但不是在此之前12个月内有订单的任何客户的数量。基本上显示他们至少在当年/12个月内处于活动状态,并且在过去6个月内处于活动状态协

希望这是有意义的。这是现有的查询,我只是不确定修改我的何处处理它的最佳/最合理的方法

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)