2013-07-29 34 views
0

我想从表中写的是带来了详细的查询(invoiceNumber,姓名,电话&电子邮件),但只有其中的条目相匹配,这些具体要求:如何查找字段在列中出现一次或在列中出现多次但在一组日期之间只出现一次的记录?

返回该行,其中的电子邮件地址只出现一次在任意日期的整个表格中 和 返回电子邮件地址多次在哪里在过去3个月内只输入一次电子邮件的行。

我相当肯定这需要嵌套的语句,但我不知道如何去设置它。

任何帮助将不胜感激!

+1

首先如果电子邮件地址已在过去几个月中输入我们需要的是能够告诉手段。你有时间戳列或类似的东西吗?如果您可以提供一些样本数据,这将会非常有用。 – ChrisProsser

回答

0

通过考虑电子邮件地址来解决这个问题。你可以通过做一个组来确定出现的频率:

 select emailaddress, count(*) as TotalCnt, 
      sum(case when invoicedate >= sysdate - 90 then 1 else 0 end) as LastThreeMonths 
     from t 
     group by emailaddress; 

这给你提供你需要的信息。下面的查询加入这个回原来的表来获得您正在寻找的行:

select t.* 
from t join 
    (select emailaddress, count(*) as TotalCnt, 
      sum(case when invoicedate >= sysdate - 90 then 1 else 0 end) as LastThreeMonths 
     from t 
     group by emailaddress 
    ) e 
    on t.emailaddress = e.emailaddress 
where e.TotalCnt = 1 or e.LastThreeMonths = 1