各位大侠:
    有一个ORACLE数据表MYNEWS,里面有NEWSID 新闻编号,NEWSTITLE 新闻标题,NEWSCLASS 所属类,NEWSCONTENT新闻内容等字段。新闻编号字段的数值唯一且自动增加,NEWSCLASS 所属类的数据共有10类且每条新闻属其中一类,现在想用一个SQL选出每个类编号最大的10条数据。我现在是做法是选出一个类一个类的编号最大10条数据然后用union all拼起来的,因为还有些其它字段,所以SQL语句就很长且很不友好。特此请教各位,谢谢。

解决方案 »

  1.   

    直接用一句SQL语句我也不会,有个方法可以给你参考一下:
    方法一:
    1、增加一个临时的字段;
    2、查询前先将每个类的前10笔记录打上标记(在临时字段上);
    3、查询有标记的所有记录。
      

  2.   

    select top 10 新闻.*,新闻类别.* from 新闻表 left join 新闻类别表 on 新闻表.类别ID=新闻类别表.ID不知道使用左连接或者右连接能否解决你的问题
      

  3.   

    select * from MYNEWS as t1 where id in (select top 10 id from MYNEWS where NEWSCLASS = t1.NEWSCLASS order by id desc)
      

  4.   


      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
    没有测试过,不知道对不对
      

  5.   

    oracle中有个row_number()函数应该可以满足你的要求的,你可以看下。
      

  6.   

    select * from
    (select NEWSID,NEWSTITLE,NEWSCLASS 
      ,row_number()over(partition by NEWSCLASS  order by NEWSID desc)rn
    from table1)
    where rn<=10