选择另一列中具有最大年份的价格

时间:2013-08-23 12:49:02

标签: sql-server-2008

我有以下选择结果

代码价格年份
1 200 2013年 1 100 2012
2 250 2011年 2 275 2012年 2 300 2010年

但我希望通过一个额外的列来跟踪这样的事情,该列根据最大年份保持价格,

代码价格年度费用
1 200 2013 200
1 100 2012 200
2 250 2011 275
2 275 2012 275
2 300 2010 275

对不起英语不好以及提出这个问题的错误方法。

2 个答案:

答案 0 :(得分:1)

尝试这样的事情:

SELECT T1.Code, T1.Price, T1.Year, T2.Price
FROM Table T1
INNER JOIN Table T2 ON T1.Code = T2.Code AND
    T2.Year = (SELECT MAX(Year) FROM Table WHERE Table.Code = T2.Code)

答案 1 :(得分:1)

您可以使用cross applyselect top 1 ... order by

执行此操作
select Code, Price, Year, ExPrice
from TableName T
    cross apply (
        select top 1 Price
        from TableName
        where Code = T.Code
        order by Year desc
    ) p(ExPrice)

row_numberjoin(无论您喜欢什么):

;with cte as (
    select Code, Price as ExPrice, rn = row_number() over (partition by Code order by Year desc)
    from TableName
)
select T.Code, Price, Year, ExPrice
from TableName T
    join cte on cte.Code = T.Code and cte.rn = 1

SQLFiddle sample