一个SQL语句

ZiSheng 2009-04-16 09:25:21
表的结构:

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 DATE

SQL>

需求:这是一个论坛的回复表,我想获取具有最新回复(按照时间排序)的十个article_id。
注:这里边的ARTICLE_ID可以重复,creatime可能重复。
另注:在线等,多谢大家!问题解决即给分。
...全文
91 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
ZiSheng 2009-04-16
  • 打赏
  • 举报
回复

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

经过修改,以上语句通过,^_^,结贴。
superhsj 2009-04-16
  • 打赏
  • 举报
回复
晕错了,去了distinct
superhsj 2009-04-16
  • 打赏
  • 举报
回复
试试这个呢?
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;
superhsj 2009-04-16
  • 打赏
  • 举报
回复
嗯,我写那个确实有点问题,还是用rownum() over()吧
[Quote=引用 6 楼 ZiSheng 的回复:]
楼上的,你的rownum,运用的不正确,在这有order by,你的sql得三层嵌套。
还有,

SQL code
select distinct rownum rn,article_id from t_reply order by CREATETIME desc



这句也不正确。
[/Quote]
speedin 2009-04-16
  • 打赏
  • 举报
回复

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
ZiSheng 2009-04-16
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 ZiSheng 的回复:]
楼上的,你的rownum,运用的不正确,在这有order by,你的sql得三层嵌套。
还有,

SQL code
select distinct rownum rn,article_id from t_reply order by CREATETIME desc



这句也不正确。
[/Quote]
讨论的是2楼
ZiSheng 2009-04-16
  • 打赏
  • 举报
回复
我看看,哈哈。
ZiSheng 2009-04-16
  • 打赏
  • 举报
回复
楼上的,你的rownum,运用的不正确,在这有order by,你的sql得三层嵌套。
还有,

select distinct rownum rn,article_id from t_reply order by CREATETIME desc

这句也不正确。
fuyou001 2009-04-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 fuyou001 的回复:]
SQL codeselect 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;
[/Quote]
上面那个有点错误,下面这个才是对的
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;
白发程序猿 2009-04-16
  • 打赏
  • 举报
回复

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
fuyou001 2009-04-16
  • 打赏
  • 举报
回复
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;
superhsj 2009-04-16
  • 打赏
  • 举报
回复
select article_id 
from (select distinct rownum rn,article_id from t_reply order by CREATETIME desc)
where rn<=10;
ZiSheng 2009-04-16
  • 打赏
  • 举报
回复
选择出来的ARTICLE_ID不能重复。

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧