我正在与报表编写者(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
答案 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