如何 return 条记录,哪些记录只在特定时间段内存在?

How do I return records based on which records only exist during a certain time period?

我有 table 发票和客户代码。我只想拉那些自 2009 年以来没有与我们有任何业务往来的客户。

我的常规select语句很简单

SELECT INVOICE.CUSTOMER_CODE FROM INVOICES

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

但是,这个语句还拉取了2010年前后做过生意的客户的客户代码,我只想要那些2010年以前没有做过生意的客户。看起来很简单,但我不知道如何做这样做,我的 google 搜索只会显示如何执行一系列日期。

我想也许我已经弄明白了。我必须再做一些检查才能确定。

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')

您还可以执行以下操作:

; 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)

您最新评论中的代码是正确的,但第一个 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')

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

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