表的结构:SQL> desc t_reply;
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ---------------------------- ID                                        NOT NULL NUMBER(18)
 ARTICLE_ID                                NOT NULL NUMBER(18)
 CONTENT                                   NOT NULL NCLOB
 USERID                                    NOT NULL NUMBER(18)
 CREATETIME                                         DATESQL>需求:这是一个论坛的回复表,我想获取具有最新回复(按照时间排序)的十个article_id。
注:这里边的ARTICLE_ID可以重复,creatime可能重复。
另注:在线等,多谢大家!问题解决即给分。

解决方案 »

  1.   

    选择出来的ARTICLE_ID不能重复。
      

  2.   

    select article_id 
    from (select distinct rownum rn,article_id from t_reply order by CREATETIME desc)
    where rn<=10;
      

  3.   

    select article_id
      from (select  rownum,article_id,rownum()over (partition by article_id) rn 
              from t_reply
              where rn =1--去掉重复的article_id
             order by CREATETIME desc)
     where rownum <= 10;
      

  4.   


    select ID, ARTICLE_ID, CONTENT, USERID, CREATETIME
      from (select ID,
                   ARTICLE_ID,
                   CONTENT,
                   USERID,
                   CREATETIME,
                   row_number() over(partition by ARTICLE_ID order by CREATETIME) rn
              from t_reply)
     where rn = 1
       and rownum <= 10
     order by CREATETIME
      

  5.   

    上面那个有点错误,下面这个才是对的
    select article_id
      from (select  rownum,article_id,row_number()over(partition by article_id order by article_id) rn 
              from t_reply
              where rn =1--去掉重复的article_id
             order by CREATETIME desc)
     where rownum <= 10;
      

  6.   

    楼上的,你的rownum,运用的不正确,在这有order by,你的sql得三层嵌套。
    还有,select distinct rownum rn,article_id from t_reply order by CREATETIME desc这句也不正确。
      

  7.   


    SELECT ARTICLE, CREATETIME
      FROM (SELECT ARTICLE_ID,
                   CREATETIME,
                   ROW_NUMBER() OVER(PARTITION BY ARTICLE ORDER BY CREATETIME DESC) RN
              FROM T_REPLY)
     WHERE RN < 11
      

  8.   

    嗯,我写那个确实有点问题,还是用rownum() over()吧
      

  9.   

    试试这个呢?
    select article_id 
    from (select distinct rownum rn,article_id,max(CREATETIME) rq from t_reply group by article_id order by rq desc)
    where rn<=10;
      

  10.   


    select article_id from(
    select rownum row_number,T.* from(
    SELECT * FROM(
    select row_number()over(partition by article_id order by  article_id) rn,
     t_reply.* from t_reply)where rn =1 order by CREATETIME desc)T)where row_number<=10经过修改,以上语句通过,^_^,结贴。