求一个SQL,就是从一个表中各个类别中选出最新的一条记录!比如有一个表
tab
id type ver
-----------------
1 a 100
2 b 102
3 d 105
4 b 101
5 a 111
6 d 121我想选出每一个type类型中ver最大的一个记录,结果应该是
tab
id type ver
------------------
2 b 102
5 a 111
6 d 121请问如何做?
tab
id type ver
-----------------
1 a 100
2 b 102
3 d 105
4 b 101
5 a 111
6 d 121我想选出每一个type类型中ver最大的一个记录,结果应该是
tab
id type ver
------------------
2 b 102
5 a 111
6 d 121请问如何做?
id name type1 type2 ver
------------------------------------
1 aaa 1 a 100
2 bbb 1 b 102
3 ccc 1 d 105
4 bbb 1 b 101
5 aaa 1 a 111
6 ddd 1 d 121
7 aaa 2 a 131
8 bbb 2 b 100
9 ccc 2 d 105
10 bbb 2 b 101
11 aaa 2 a 111
12 ddd 2 d 121结果应该是:
tab
id name type1 type2 ver
------------------------------------
2 bbb 1 b 102
3 ccc 1 d 105
5 aaa 1 a 111
6 ddd 1 d 121
7 aaa 2 a 131
9 ccc 2 d 105
10 bbb 2 b 101
12 ddd 2 d 121
请问SQL应该如何写?
from tab a,
(select type1, type2, max(ver) ver from tab group by type1, type2) b
where a.type1 = b.type1
and a.type2 = b.type2
and a.ver = b.ver
数据量大时注意效率
from(
select a.*,row_number()over(partition by type1,type2 order by ver desc) rn
from tablename)
where rn=1;
first_value(id)over(partition by type1,type2 order by ver desc) id,
first_value(name)over(partition by type1,type2 order by ver desc) name,
type1,type2,max(ver)over(parition by type1,type2) ver
from tablename;