oracle 分组查询问题:
create table ZHXQ_NEWS_ARTICLE
(
ID NUMBER(10) not null,
MODULE_ID NUMBER(6) default 101 not null,--模块ID
TITLE VARCHAR2(60) not null,
AUTHOR VARCHAR2(10) default '小区' not null,
CONTENT CLOB,
ORIGIN VARCHAR2(20),
DATE_TIME VARCHAR2(20) )
现在想按MODULE_ID 进行分组查询并按DATE_TIME 排序,最后取每类(MODULE_ID)的前10条数据 请问SQL怎么写?
追问:你好的个SQL可以查询但是性能 不是很好反应很慢 (oracle10G),有没有改进的方法?此法不通 谢谢 ,“乡间的老牛”那种可以这个SQL可以查出 结果但是查出的所有的 怎么改?这里只能上传一张图片我把两张合成一张了,问题如题。。
答案:用 Oracle 的分析函数处理一下, 很简单.
SELECT
日期, 数量,
SUM( 数量 ) OVER(ORDER BY 日期 ROWS UNBOUNDED PRECEDING) AS "依次累计"
FROM
其他:SELECT *
FROM (SELECT MODULE_ID,
ROW_NUMBER() OVER(PARTITION BY MODULE_ID ORDER BY DATE_TIME) AS RN
FROM ZHXQ_NEWS_ARTICLE)
WHERE RN <= 10 试试看我的,用的是oracle数据库
select r.* from ZHXQ_NEWS_ARTICLE r
where r.rownum<=10
group by r.MODULE_ID
order by to_char(DATE_TIME ,'YYYY-MM-DD HH24:MI:SS') DESC 都描述出来了,还不会写语句??不就是top 10 ……group……order by 不知道你要的是不是这个效果?
SELECT
*
FROM
ZHXQ_NEWS_ARTICLE
WHERE
( SELECT
COUNT(1)
FROM
ZHXQ_NEWS_ARTICLE subTopnTest
WHERE
ZHXQ_NEWS_ARTICLE.MODULE_ID = subTopnTest.MODULE_ID
AND ZHXQ_NEWS_ARTICLE.DATE_TIME < subTopnTest.DATE_TIME
) < 10
ORDER BY
MODULE_ID , DATE_TIME
上一个:上海oracle OCP怎么样?
下一个:如何在Oracle的存储过程中建表啊?