日期:2014-05-17  浏览次数:20786 次

求一个查询语句的写法
表tbl,存放bbs里的帖子
字段:
fld_id,帖子编号
fld_pid,父帖编号,如果是父帖则此字段值=0
fld_body,帖子内容
fld_createtime,发帖时间

一个父帖可以有多个子帖,
确认父帖的方法是,fld_pid=0,
确认父帖和子帖关系的方法是:a记录的fld_pid   =   b记录的fld_id,则b是a的父帖.

我现在想得到一个结果集,全部都是父帖,并且按照以下要求排序
它的最新子帖的发布时间降序排列
如果没有最新子帖,则父帖的发布时间作为最新子帖的发布时间.

例如:
fld_id,fld_pid,fld_body,fld_createtime
1             0               1                 2006-01-02
2             0               2                 2006-01-01
3             1               3                 2006-01-03
4             1               4                 2006-01-08
5             2               5                 2006-01-05
6             2               6                 2006-01-06
7             0               7                 2006-01-07

则得到的结果集是:
fld_id,fld_body
1             1
7             7
2             2
其中,1的最新子帖是4(2006-01-08)
          7没有最新子帖,则使用自己发布的时间作为最新子帖发布时间(2006-01-07)
          2的最新子帖发布时间是6(2006-01-06)

谢谢高人指点~~~

------解决方案--------------------
select
t1.fld_id,
t1.fld_body,
max(decode(t2.fld_createtime, null, t1.fld_createtime, t2.fld_createtime)) createtime
from
tbl1 t1,
tbl1 t2
where
t1.fld_pid = 0
and t1.fld_id =t2.fld_pid (+)
group by
t1.fld_id,
t1.fld_body
order by createtime