各位大侠:
有一个ORACLE数据表MYNEWS,里面有NEWSID 新闻编号,NEWSTITLE 新闻标题,NEWSCLASS 所属类,NEWSCONTENT新闻内容等字段。新闻编号字段的数值唯一且自动增加,NEWSCLASS 所属类的数据共有10类且每条新闻属其中一类,现在想用一个SQL选出每个类编号最大的10条数据。我现在是做法是选出一个类一个类的编号最大10条数据然后用union all拼起来的,因为还有些其它字段,所以SQL语句就很长且很不友好。特此请教各位,谢谢。
有一个ORACLE数据表MYNEWS,里面有NEWSID 新闻编号,NEWSTITLE 新闻标题,NEWSCLASS 所属类,NEWSCONTENT新闻内容等字段。新闻编号字段的数值唯一且自动增加,NEWSCLASS 所属类的数据共有10类且每条新闻属其中一类,现在想用一个SQL选出每个类编号最大的10条数据。我现在是做法是选出一个类一个类的编号最大10条数据然后用union all拼起来的,因为还有些其它字段,所以SQL语句就很长且很不友好。特此请教各位,谢谢。
方法一:
1、增加一个临时的字段;
2、查询前先将每个类的前10笔记录打上标记(在临时字段上);
3、查询有标记的所有记录。
SELECT *
FROM MYNEWS N
WHERE NEWSID >= (SELECT TOP 1 TT.NEWSID
FROM (SELECT TOP 10 NEWSID
FROM MYNEWS N2
WHERE N2.NEWSCLASS = N.NEWSCLASS
ORDER BY N2.NEWSID DESC) TT
ORDER BY TT.NEWSID ASC)
ORDER BY NEWSCLASS, NEWSID DESC
没有测试过,不知道对不对
(select NEWSID,NEWSTITLE,NEWSCLASS
,row_number()over(partition by NEWSCLASS order by NEWSID desc)rn
from table1)
where rn<=10