求一条oracle下的sql语句。要求如果帖子没有回复则最后回复人和最后回复时间为发贴人和发帖时间,如果有回复则选择最近的。

xml_new(new_id,new_title,user_id,new_time)--帖子id,帖子标题,发帖用户的id,发帖时间
xml_revert(rev_id,new_id,user_id,rev_time)--贴的id,所回复的id,回复人的id,回复时间
xml_user(user_id,user_name)--用户id,用户名最终显示为
      new_title  new_user_name  new_time    rev_user_name     rev_time
意思:标题         发贴人           发帖时间     最后回复人           最后回复时间

解决方案 »

  1.   

    select  aaa.new_title,aaa.new_user_name,c.user_name rev_user_name ,aaa.rev_time
    from
    (
    select aa.*,row_number() over (partition by aa.new_id order by aa.rev_time desc) rn
    from(
    select a.new_id,a.new_title,c.user_name new_user_name,a.new_time,nvl(b.user_id,a.user_id) rev_user_id,nvl(b.rev_time,a.new_time) rev_time
    from xml_new a,xml_revert b,xml_user c
    where a.new_id=b.new_id(+)
     a.user_id=c.user_id
    ) aa) aaa,
    xml_user c
    where aaa.rev_user_id=c.user_id
    and aaa.rn=1
      

  2.   

    select t1.new_title,t1.user_id,t1.new_time,nvl(t2.user_id,t1.user_id),nvl(t2.rev_time,t1.new_time)
    from xml_new t1,
    (select * from xml_revert xr where rev_time=(select max(rev_time) as newrev_time from xml_revert where rev_id=xr.rev_id group by rev_id)) t2
    --最后1条回复
    where t1.new_id=t2.rev_id(+)