三年前有一个问题得到了充分的回答,所以我不想污染它,因为这是对这个问题的延伸。先前的问题是this
好的,我有一个包含以下列的表
部分数据可能如下所示:
ID, ForeignKeyId, AttributeName, AttributeValue, Created
1, 1, 'EmailPreference', 'Text', 1/1/2010
2, 1, 'EmailPreference', 'Html', 1/3/2010
3, 1, 'EmailPreference', 'Text', 1/10/2010
4, 2, 'EmailPreference', 'Text', 1/2/2010
5, 2, 'EmailPreference', 'Html', 1/8/2010
我想运行一个查询,告诉我指定REQUEST_DATE的最新“创建”日期 对于每个不同的ForeignKeyId和AttributeName,使用Created列确定最新值。
CreatedDate为'1/4/2010'的示例输出为:
ForeignKeyId AttributeName AttributeValue Created
-------------------------------------------------------
1 'EmailPreference' 'Text' 1/2/2010
2 'EmailPreference' 'Html' 1/3/2010
CreatedDate为'1/9/2010'的示例输出为:
ForeignKeyId AttributeName AttributeValue Created
-------------------------------------------------------
1 'EmailPreference' 'Text' 1/2/2010
2 'EmailPreference' 'Html' 1/8/2010
如何使用SQL Server 2008执行此操作?
到目前为止,我有:
DECLARE @REQUEST_DATE varchar(10)
SELECT @REQUEST_DATE = '1/9/2010'
select t1.* from (select ForeignKeyId,AttributeName, max(Created) AS MaxCreated
from YourTable
group by ForeignKeyId,AttributeName) t2
join YourTable t1 on
t2.ForeignKeyId = t1.ForeignKeyId
and t2.AttributeName = t1.AttributeName
and t2.MaxCreated = t1.Created
但我无法确定将限制放在何处仅包括在请求日期之前包含'已创建'的行
答案 0 :(得分:1)
DECLARE @REQUEST_DATE varchar(10)
SELECT @REQUEST_DATE = '1/9/2010'
select t1.* from (select ForeignKeyId,AttributeName, max(Created) AS MaxCreated
from YourTable
where created < @REQUEST_DATE
group by ForeignKeyId,AttributeName) t2
join YourTable t1 on
t2.ForeignKeyId = t1.ForeignKeyId
and t2.AttributeName = t1.AttributeName
and t2.MaxCreated = t1.Created