如果存在,最近的记录在3个月内

时间:2016-05-13 19:21:30

标签: sql date report

我正在与报表编写者(DataInsights)合作。在这个特定的报告中,一些客户有一个"特价"有些人不知道。对于那些做的,有一个到期日。目前,该报告每个客户产生几条具有特殊费率的行,因为每个特殊费率的法术都会生成它自己的行。我们想要一个简单的SQL语句,它将维护所有没有"特殊速率"并且只返回最近的特殊费率" "到期日"如果它在最近3个月内。 (如果没有办法将其限制在最近3个月,那就没关系,我们只需要最近的一行)

示例:

(当前)

Name        Client #        Rate        Exp. Date  
John Doe        12345       Special     01/12/2014  
John Doe        12345       Special     01/12/2015  
John Doe        12345       Special     01/12/2016  
Jane White      78965  
Dixie Brown     45879       Exceptional 07/30/2011  
Dixie Brown     45879       Exceptional 07/30/2012  
Dixie Brown     45879       Exceptional 07/30/2013  

(应该)

John Doe        12345       Special     01/12/2016  
Jane White      78965   
Dixie Brown     45879

2 个答案:

答案 0 :(得分:1)

试试这个:

select Name, Client, Rate, Date as Special_Date
 from yourtable
  INNER JOIN
        (
          select max(Date ) Date , Name, Client
          from yourtable
          group by  Name, Client
        ) thedatetable

答案 1 :(得分:0)

如果您的名称,客户端和费率在每个组中始终与示例数据中的相同,那么您可以按其分组返回max(expdt)。要获得没有特殊费率的所有记录并限制为3个月的记录,请将它们添加为过滤器(使用OR)。使用下面的SQL Server语法并稍微编辑一些数据,以便在3个月的限制内:

WITH testdata(Name, Client, Rate, expdt)
AS(       select 'John Doe',    12345, 'Special',    '01/12/2016'  
union all select 'John Doe',    12345, 'Special', '   03/13/2016'  
union all select 'John Doe',    12345, 'Special',    '03/12/2016'  
union all select 'Jane White',  78965,  NULL,         NULL 
union all select 'Dixie Brown', 45879, 'Exceptional', '07/30/2016'  
union all select 'Dixie Brown', 45879, 'Exceptional', '07/30/2016'  
union all select 'Dixie Brown', 45879, 'Exceptional', '07/30/2016' 
)

select Name, client, Rate, max(expdt) expdt from testdata
where Rate is NULL 
  or  expdt>=DATEADD(month, -3, GETDATE())
group by Name, client, Rate

输出:

Name        client Rate        expdt           
----------- ------ ----------- ---------- 
Dixie Brown 45879  Exceptional 07/30/2016 
Jane White  78965  null        null       
John Doe    12345  Special     03/12/2016