如何根据特定时间段内仅存在的记录返回记录?

时间:2015-06-17 19:46:17

标签: sql-server-2005

我有一张发票和客户代码表。自2009年以来,我只想吸引那些与我们没有做过任何业务的客户。

我的常规选择语句很简单

SELECT INVOICE.CUSTOMER_CODE FROM INVOICES

WHERE INVOICES.ORDER_DATE <= '01-01-2010'

但是,此声明还提供了在2010年之前和之后开展业务的客户的客户代码。我只想要那些在2010年之前没有开展业务的客户。看起来很简单,但我无法理解如何做到这一点我的谷歌搜索只提出如何做一系列日期。

3 个答案:

答案 0 :(得分:3)

您最新评论中的代码是正确的,但第一个where子句是多余的 - 以下内容将起作用:

SELECT INVOICE.CUSTOMER_CODE FROM INVOICE
WHERE INVOICE.CUSTOMER_CODE NOT IN (SELECT INVOICE.CUSTOMER_CODE FROM INVOICE WHERE INVOICE.ORDER_DATE >= '01-01-2010')

发票表中包含您的所有客户。您首先选择自2009年以来已经开展业务的所有客户(在子查询中)。然后选择所有剩余客户。这也可以通过以下可能更容易理解的代码来实现:

SELECT INVOICE.CUSTOMER_CODE FROM INVOICE
EXCEPT
SELECT INVOICE.CUSTOMER_CODE FROM INVOICE WHERE INVOICE.ORDER_DATE >= '01-01-2010'

答案 1 :(得分:0)

我想也许我已经明白了。我必须做更多检查才能确定。

SELECT INVOICE.CUSTOMER_CODE FROM INVOICE

WHERE INVOICE.ORDER_DATE < '01-01-2010'
AND INVOICE.CUSTOMER_CODE NOT IN (SELECT INVOICE.CUSTOMER_CODE FROM INVOICE WHERE INVOICE.ORDER_DATE >= '01-01-2010')

答案 2 :(得分:0)

您还可以执行以下操作:

; with cc as (
    Select Distinct
           INVOICE.CUSTOMER_CODE
    From   Invoice
    Where  INVOICE.ORDER_DATE >= '01-01-2010'
)
Select INVOICE.CUSTOMER_CODE
From   INVOICE
Where  INVOICE.CUSTOMER_CODE not in (select * from cc)