有时我们对数据order by后,需要取出每一个分组中的第一行或者最后一行,有什么比较好的办法?
假设order by deptno,sal后的数据如下:
deptno empno sal
10 1002 2400
10 1003 2400
10 1001 2500
10 1004 3000
20 2005 1900
20 2003 2000
20 2002 2000
20 2001 2400
现在我只需要对每个部门取最前面的一条数据:
deptno empno sal
10 1002 2400
20 2005 1900
何解?
假设order by deptno,sal后的数据如下:
deptno empno sal
10 1002 2400
10 1003 2400
10 1001 2500
10 1004 3000
20 2005 1900
20 2003 2000
20 2002 2000
20 2001 2400
现在我只需要对每个部门取最前面的一条数据:
deptno empno sal
10 1002 2400
20 2005 1900
何解?
是否又需要分析函数?
oracle:
select
x.deptno,x.empno,x.sal from
(
select
deptno,
empno,
sal,
row_number() over (partition by deptno order by sal asc) as rowno
from
emp
) x
where
x.rowno=1