库如下 ID TYPE NAME
1 1 111
2 1 222
3 1 333
4 2 444
5 2 4535
6 3 4564
7 4 33456453
8 5 456456
我想显示 TYPE 的头2条记录...也就是想要的结果是
ID TYPE NAME
1 1 111
2 1 222
4 2 444
5 2 4535
6 3 4564
7 4 33456453
8 5 456456
按照 type 来分组,显示每组中的前2条记录....
不知道我的意图有没有表达清楚...大家帮帮忙吧...
1 1 111
2 1 222
3 1 333
4 2 444
5 2 4535
6 3 4564
7 4 33456453
8 5 456456
我想显示 TYPE 的头2条记录...也就是想要的结果是
ID TYPE NAME
1 1 111
2 1 222
4 2 444
5 2 4535
6 3 4564
7 4 33456453
8 5 456456
按照 type 来分组,显示每组中的前2条记录....
不知道我的意图有没有表达清楚...大家帮帮忙吧...
解决方案 »
- APPSSTAND.fmb和Template.fmb是什么关系啊
- where 条件怎么不起作用呢
- 关于备份和恢复
- oracle导入问题
- 使用oracle的rownum分页,如何去掉多余的rownum列
- 求助:ORA-23326: 物件群組 "PUBLIC"."REP_MAIN" 不是無聲的--什么意思?
- 请教存储过程 急!!!
- 在oracle817中怎样删除表空间
- 100求购Sql expert for oracle 3.6.2 pro版本注册码,正确就给分
- oracle 动态sql查询语句中含有表中字段时的单引号问题
- 有没有更好的写法?
- 急求助大侠:oracle 中的事务处理的小问题,先谢过了.....
2 UNION
3 SELECT 2 ID,1 TYPE,'222' NAME FROM DUAL
4 UNION
5 SELECT 3 ID,1 TYPE,'333' NAME FROM DUAL
6 UNION
7 SELECT 4 ID,2 TYPE,'444' NAME FROM DUAL
8 UNION
9 SELECT 5 ID,2 TYPE,'4535' NAME FROM DUAL
10 UNION
11 SELECT 6 ID,3 TYPE,'4564' NAME FROM DUAL
12 UNION
13 SELECT 7 ID,4 TYPE,'33456453' NAME FROM DUAL
14 UNION
15 SELECT 8 ID,5 TYPE,'456456' NAME FROM DUAL
16 )
17 SELECT * FROM (select ID,TYPE,NAME,ROW_NUMBER()OVER(PARTITION BY tYPE ORDER BY ID) RN FROM A) B
18 WHERE RN<=2;
ID TYPE NAME RN
---------- ---------- -------- ----------
1 1 111 1
2 1 222 2
4 2 444 1
5 2 4535 2
6 3 4564 1
7 4 33456453 1
8 5 456456 1
7 rows selected
http://jack198409.itpub.net/
select m*TYPE,m.ID,m.NAME from
(select *,rank() over(partition by TYPE order by ID) curr_rank from Test)m
where curr_rank<=2;这里用到了一个分析函数 over()analytic function
语法如下:
Function(arg1,..., argn) OVER ( [PARTITION BY <...>] [ORDER BY <....>] [<window_clause>] )
--<window_clause> is like "ROW <?>" or "RANK <?>"
RANK() and DENSE_RANK()都是根据某个字段或表达式做的范围划分 不过有区别的 看下例
EG:SELECT empno, deptno, sal,
RANK() OVER (PARTITION BY deptno
ORDER BY sal DESC NULLS LAST) RANK,
DENSE_RANK() OVER (PARTITION BY
deptno ORDER BY sal DESC NULLS
LAST) DENSE_RANK
FROM emp
WHERE deptno IN (10, 20)
ORDER BY 2, RANK;EMPNO DEPTNO SAL RANK DENSE_RANK
------ ------- ----- ----- ----------
7839 10 5000 1 1
7782 10 2450 2 2
7934 10 1300 3 3
7788 20 3000 1 1
7902 20 3000 1 1
7566 20 2975 3 2
7876 20 1100 4 3
7369 20 800 5 48 rows selected.