有一个表:person
id name birth person_no
XX James 1987/01/01 001
YY Tom 1981/12/23 009
··· ···
要求1:
1按照birth排序
2取前20条数据
sql查询语句:
select t1.* from
(select t.*,ROW_NUMBER() OVER( ORDER BY t.birth DESC) AS ROWNUMBER from person t)t1
where t1.ROWNUMBER<=20
主要是一个ROW_NUMBER() OVER(ORDER BY ···)函数,OVER函数里还可以进行分组内排序:
分组内排序:
不分组排序:
要求2:
1按照birth排序
2取前20条数据
3person_no为009的记录,排在第一位
sql查询语句:
select t1.* from
(select t.*,ROW_NUMBER() OVER( ORDER BY t.birth DESC) AS ROWNUMBER from person t)t1
where t1.ROWNUMBER<=20 and t.person_no='009'
union all --注意不能用union,如果用union会将联合后的结果集重新排序,这样009这个就不会排在第一个了
select t1.* from
(select t.*,ROW_NUMBER() OVER( ORDER BY t.birth DESC) AS ROWNUMBER from person t)t1
where t1.ROWNUMBER<=20 and t.person_no!='009'