2013-10-11 73 views
1

我的目标是使用不同的一列,但返回所有的列。选择不同的一列,但返回所有列

我的表是这样的

id, name, year 

1, John, 2012 

2, Jake, 2012 

3, Jenna, 2013 

1, John, 2013 

我需要做id列不同,并返回所有的三列,以及不一样的ID,我需要最新的记录。

输出我需要的是

id, name, year 

1, John, 2013 

2, Jake, 2012 

3, Jenna, 2013 

我已经试过这两个命令

  1. 从sampletable选择不同的编号,名称,年份。 我会在所有行上做不同的处理。

  2. select * from sampletable group by id 我只会返回id列并删除其他列。

回答

0

使用窗口和分析功能,您可以通过这一年划分由ID排序的数据,并选择了第一个结果:

SELECT id, name, year 
FROM 
(SELECT id, name, year, row_number() over (partition by id order by year desc) as r 
    FROM sampletable) S 
WHERE S.r = 1; 

再加上有其他排名功能,如rankdense_rank为不同的选择。

0

而不解析函数

 
    select t.id, t.name, t.year from t 
    join 
     (select id, max(year) year from t group by id) as S 
     on S.id=t.id and S.year = t.year 

;

相关问题