复杂的WHERE条件来整理数据

时间:2012-08-21 23:53:18

标签: sql-server sql sql-server-2008

我有一个SQL表,其中包含有关clints的数据(比如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 

请帮助找到解决方案。

1 个答案:

答案 0 :(得分:0)

我认为你的意思是:

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

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