Sql server 2005 如何根据仅在特定时间段内存在的记录返回记录?
我有一张发票和客户代码表。我只想吸引自2009年以来从未与我们做过任何业务的客户 我的常规select语句很简单Sql server 2005 如何根据仅在特定时间段内存在的记录返回记录?,sql-server-2005,Sql Server 2005,我有一张发票和客户代码表。我只想吸引自2009年以来从未与我们做过任何业务的客户 我的常规select语句很简单 SELECT INVOICE.CUSTOMER_CODE FROM INVOICES WHERE INVOICES.ORDER_DATE <= '01-01-2010' 但是,该声明还提取了2010年前后做过业务的客户的客户代码。我只想要那些在2010年之前没有做过生意的客户。这看起来很简单,但我不知道如何做到这一点,我的谷歌搜索只显示了如何做一系列的日期。我想也许我已经找
SELECT INVOICE.CUSTOMER_CODE FROM INVOICES
WHERE INVOICES.ORDER_DATE <= '01-01-2010'
但是,该声明还提取了2010年前后做过业务的客户的客户代码。我只想要那些在2010年之前没有做过生意的客户。这看起来很简单,但我不知道如何做到这一点,我的谷歌搜索只显示了如何做一系列的日期。我想也许我已经找到了答案。我得再检查一下才能确定
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')
发票表包含您的所有客户。您首先在子查询中选择自2009年以来开展业务的所有客户。然后选择所有剩余客户。这也可以通过以下可能更容易理解的代码来实现:
SELECT INVOICE.CUSTOMER_CODE FROM INVOICE
EXCEPT
SELECT INVOICE.CUSTOMER_CODE FROM INVOICE WHERE INVOICE.ORDER_DATE >= '01-01-2010'
使用“不存在”比不存在要好。