我需要一些帮助,以便在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但不确定。
DENSE RANK
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