0

我有一个 SQL 表,其中包含有关 clint 的数据(比如 ClientId)和他们为服务付费的日期以及他们的服务开始的日期:

Headings: ClientId, PurchaseDate, StartDate
Line 1: 1; 1/07/2012; 15/07/2012
Line 2: 2; 21/06/2012; 01/07/2012
Line 3: 3; 31/07/2012; 02/08/2012
Line 4: 4; 04/08/2012; 15/08/2012
Line 5: 5; 15/08/2012; 2/09/2012

我创建了一个查询,它只选择那些在上个月开始服务的客户。条件语句如下:

WHERE StartDate >= DATEADD(month, -1, dateadd(month, datediff(month,0,getdate()),0)) 
and StartDate < dateadd(month, 1, dateadd(month, -1, dateadd(month, datediff(month,0,getdate())

现在我需要一个查询,其中还包括那些在上个月支付服务费的客户。我认为可以有以下说法:

WHERE PurchaseDate >= DATEADD(month, -1, dateadd(month, datediff(month,0,getdate()),0)) 
and PurchaseDate < dateadd(month, 1, dateadd(month, -1, dateadd(month, datediff(month,0,getdate())

问题是那些在一个月内具有 PurchaseDate 和在下个月具有 StartDate 的客户将出现在这两个月的报告中。因此,据我了解,应该有以下含义的复杂条件:

WHERE StartDate >= DATEADD(...)
 & StartDate < DATEADD(...) 
 & (PurchaseDate >= DATEADD(...)
 & PurchaseDate < DATEADD(...) 
 & PurchaseDate happened a month earlier than StartDate 

请帮助找到解决方案。

4

1 回答 1

0

我想你的意思是这样的:

WHERE StartDate >= DATEADD(...) & StartDate < DATEADD(...) 
& NOT (PurchaseDate >= DATEADD(...) & PurchaseDate < DATEADD(...))

如果客户上个月购买,则添加一个NOT以从本月的开始总数中排除客户

于 2012-08-22T00:46:48.560 回答