是不是想查处给id为I的所有留言,按时间排序:
注意:一张表不能有两个一样的字段“留言时间”

解决方案 »

  1.   

    SELECT 留言内容
    FROM 留言表
    WHERE 父ID=1
    ORDER BY 回复时间 DESC
      

  2.   

    select 留言表.id,ISNULL(中间表.最后留言时间,留言表.留言时间) as 最后时间,留言表.留言内容
    from 留言表 left outer join
    (select 父id,max(留言时间) as 最后留言时间 from 留言表 group by 父id) 中间表 on 留言表.id=中间表.父ID where 留言表.id=0
      

  3.   

    忘了排序了
    select * from
    (select 留言表.id,ISNULL(中间表.最后留言时间,留言表.留言时间) as 最后时间,留言表.留言内容
    from 留言表 left outer join
    (select 父id,max(留言时间) as 最后留言时间 from 留言表 group by 父id) 中间表 on 留言表.id=中间表.父ID where 留言表.id=0)
    ) 中间表2
    order by 中间表2.最后时间 desc未测试,你自己试试好不好使吧
      

  4.   

    留言表结构
    id      留言时间           留言内容        父ID               
    1       2005-02-02          ddddd           0
    2       2005-02-02          3dweew          0
    3       2005-02-02          3232323         2
    相关说明:
    父ID默认为0
    如果不为0,而为I,那么该天记录就是对id为I的留言就行回复。
    比如上面的数据,1,2两条都是留言的内容。而3为对第一条留言的回复。现在我想得到最新有回复的留言。如果没有留言就排到最后。
    得到下面结果为:id      留言时间           留言内容        父ID               
    2       2005-02-02          ddddd           0
    1       2005-02-02          3dweew          0请问,SQL怎么写??
      

  5.   

    SELECT *
    FROM 留言表
    WHERE 父ID<>0
    ORDER BY 留言时间 DESC
    UNION
    SELECT *
    FROM 留言表
    WHERE 父ID=0
    ORDER BY 留言时间 DESC
      

  6.   

    没有那么复杂的,这样就可以的 Select * from 留言表 A Where id=0
    Order By (Case When Exists(Select * from 留言表 Where 父ID=A.id) Then 0 Else 1 End),留言时间
      

  7.   

    Select * from 留言表 A Where id=0
    Order By (Case When Exists(Select * from 留言表 Where 父ID=A.id) Then 0 Else 1 End),留言时间
      

  8.   

    回复人: paoluo(一天到晚游泳的鱼) ( ) 信誉:100 
    没有那么复杂的,这样就可以的 Select * from 留言表 A Where id=0
    Order By (Case When Exists(Select * from 留言表 Where 父ID=A.id) Then 0 Else 1 End),留言时间---------------------------------------------
    这贴楼主早就没影了
    你写的这个只能判断有没有回复,而没判断最后回复时间
      

  9.   

    select id 留言时间 留言内容 父ID 留言时间
    from 留言表
    where 父ID=I
    order by 留言时间;如果是id=I就回复的话那么where处改为
    where id=I