数据表如下:
表名:t
id kind tile content .......(其他字段)
1 1 fsdf dgfdgd
2 1 fsfd sdgfd
3 1 dfsa dfsdg
4 1 dfd gfdg
5 1 dsfa dsgf
6 1 fds dsfs
7 2 dsfs fdsfs
8 2 fsd fsds
9 3 fsdf dgfdgd
10 3 fsfd sdgfd
11 3 dfsa dfsdg
12 3 dfd gfdg
13 3 dsfa dsgf以kind字段分组,只取5行记录,如果不满5条就用空行代替
最终实现这样的效果
id kind tile content .......(其他字段)
1 1 fsdf dgfdgd
2 1 fsfd sdgfd
3 1 dfsa dfsdg
4 1 dfd gfdg
5 1 dsfa dsgf
7 2 dsfs fdsfs
空行
空行
空行
空行
9 3 fsdf dgfdgd
10 3 fsfd sdgfd
11 3 dfsa dfsdg
12 3 dfd gfdg
13 3 dsfa dsgf
困扰一下午了,求高手解惑,到底应该怎么写这条SQL语句,谢谢
表名:t
id kind tile content .......(其他字段)
1 1 fsdf dgfdgd
2 1 fsfd sdgfd
3 1 dfsa dfsdg
4 1 dfd gfdg
5 1 dsfa dsgf
6 1 fds dsfs
7 2 dsfs fdsfs
8 2 fsd fsds
9 3 fsdf dgfdgd
10 3 fsfd sdgfd
11 3 dfsa dfsdg
12 3 dfd gfdg
13 3 dsfa dsgf以kind字段分组,只取5行记录,如果不满5条就用空行代替
最终实现这样的效果
id kind tile content .......(其他字段)
1 1 fsdf dgfdgd
2 1 fsfd sdgfd
3 1 dfsa dfsdg
4 1 dfd gfdg
5 1 dsfa dsgf
7 2 dsfs fdsfs
空行
空行
空行
空行
9 3 fsdf dgfdgd
10 3 fsfd sdgfd
11 3 dfsa dfsdg
12 3 dfd gfdg
13 3 dsfa dsgf
困扰一下午了,求高手解惑,到底应该怎么写这条SQL语句,谢谢
解决方案 »
- dbms_job自动任务可以在directory内写文件,但是手动执行任务的过程却提示无法写文件。
- 求教一个简单的问题
- 在cent os6.3,64bit上安装32位的Oracle11gr2遇到一个问题,请大家帮忙解答一下
- 关于ORACLE expdb 和 impdb的问题
- 一个简单的触发器问题,帮忙啊!
- 立即给分:当查询记录值为NULL时,怎么用“0”取代,即显示就是“0”?
- oracle 数据库的小问题
- 怎样选取出小数点后的位数大于3的数据
- ORA-12203 TNS:unable to connect to destination
- plsql创建自动导出表的任务如果写啊,谢谢
- 创建了一个跨oracle库的触发器,用的是dblink,但是报错
- 股票正负面消息库——关键字
-- 当有记录时:取最多5行的规则是什么啊?-- 用 row_number() over(partition by ... order by) 呗!
---------- ---------- ----------
1 1 fsdf
2 1 fsdf
3 1 fsdf
4 1 fsdf
5 1 fsdf
6 1 fsdf
7 2 fsdf
8 2 fsdffd
9 3 fsdffd
10 3 fsdffd
11 3 fse已选择11行。SQL> select * from (select id, kind, title, row_number() over (partition by kind order by id) r from t) where r<=5; ID KIND TITLE R
---------- ---------- ---------- ----------
1 1 fsdf 1
2 1 fsdf 2
3 1 fsdf 3
4 1 fsdf 4
5 1 fsdf 5
7 2 fsdf 1
8 2 fsdffd 2
9 3 fsdffd 1
10 3 fsdffd 2
11 3 fse 3已选择10行。补充空行的问题再找人续续。:-)
SELECT ID,kind,title,CONTENT
from(
SELECT tmp.*,
row_number()OVER(PARTITION BY flag ORDER BY ID NULLS LAST) rn
from(
SELECT t.*,kind flag FROM t
UNION ALL
SELECT *
FROM (SELECT NULL A,NULL b,NULL c,NULL d FROM dual CONNECT BY ROWNUM<5),
(SELECT DISTINCT kind FROM t))tmp)
where rn<=5
如果数据量大,这样性能会很差
而且,这个需求...不应该放在sql里面实现
最终还是谢谢各位了
我用的是sql实现
大概思路如下:
select * from t whre kind in (select kind from t group by kind)
union all
select * from t ,(select count(id) cnt kind from t group by kind) a whre a.cnt<=4 and a.cnt>0 a.kind=kind
union all
select * from t ,(select count(id) cnt kind from t group by kind) a whre a.cnt<=3 and a.cnt>0 a.kind=kind
union all
select * from t ,(select count(id) cnt kind from t group by kind) a whre a.cnt<=2 and a.cnt>0 a.kind=kind
union all
select * from t ,(select count(id) cnt kind from t group by kind) a whre a.cnt<=1 and a.cnt>0 a.kind=kind