我需要一点帮助在SQL Server 2008中为以下内容编写SELECT语句:(示例表)
Date ProductID Year Price
01-01-10 01 2009 1.00
02-01-10 01 2009 2.00
03-01-10 01 2010 3.00
04-01-10 01 2010 4.00
05-01-10 01 2011 5.00
06-01-10 01 2011 6.00
01-01-10 02 2009 1.00
02-01-10 02 2009 2.00
03-01-10 02 2010 3.00
04-01-10 02 2010 4.00
05-01-10 02 2011 5.00
06-01-10 02 2011 6.00
01-01-10 03 2009 1.00
02-01-10 03 2009 2.00
03-01-10 03 2010 3.00
04-01-10 03 2010 4.00
05-01-10 03 2011 5.00
06-01-10 03 2011 6.00
01-01-10 04 2009 1.00
02-01-10 04 2009 2.00
03-01-10 04 2010 3.00
04-01-10 04 2010 4.00
05-01-10 04 2011 5.00
06-01-10 04 2011 6.00
对于每个唯一的ProductID-Year组合(例如01-2009,03-2011),我需要获取最新日期的行。实际数据组织得不是很好 - 01-2009可能只有1条记录,03-2009可能只有15条记录。
我想我必须使用DENSE RANK
,但我不确定。
答案 0 :(得分:8)
row_number应该足以满足您的需求。
注意:我假设您的Date列是真正的Date或DateTime数据类型,而不是您显示的表单中的字符串。如果该假设是错误的,则需要一些额外的字符串操作来将Date转换为可排序的格式。
;with cteRowNumber as (
select Date, ProductID, Year, Price,
row_number() over (partition by ProductID, Year order by Date desc) as RowNum
from YourTable
)
select Date, ProductID, Year, Price
from cteRowNumber
where RowNum = 1