是这个结果吗:
select a.* from test1 a inner join (
select parentid,max(createtime) maxcreatetime from test1 group by parentid) b
on a.parentid=b.parentid and a.createtime=b.maxcreatetimeid name parentid createtime
6 fff 2 2014-05-02 20:03:00.000
3 ccc 0 2014-05-02 18:03:00.000

解决方案 »

  1.   

     
    SELECT  A.*
    FROM    test1 A
    WHERE   NOT EXISTS ( SELECT 1
                         FROM   test1 B
                         WHERE  A.parentid = B.parentid
                                AND A.createtime < b.CREATEtime )
    /*
    id name parentid createtime
    3 ccc 0 2014-05-02 18:03:00.000
    6 fff 2 2014-05-02 20:03:00.000
    */
      

  2.   

    谢谢你的回答,,你这样把parent=0的都过滤掉只剩下一条了,
    我想要这样的结果,
    /* 得到结果*/
    id name  parentid createtime
    6  fff       2    2014-05-02 20:03
    3  ccc       0    2014-05-02 18:03
    1  aaa       0    2014-05-02 17:03
    4  ddd       0    2014-05-02 15:03
    8  hhh       0    2014-05-02 14:03
    .......
    这样依次的结果 只是过滤parentid =2 的,,
    .......
      

  3.   

    不好意思各位 ,没有说明清楚,,只是过滤parentid =2 的数据。。
      

  4.   

    parentid =0的数据全部显示吗?还是说parentid =0的数据需要根据parentid =0 和那么一起过滤?
      

  5.   

    是这样的结果吗:select a.* from test1 a inner join (
    select parentid,max(createtime) maxcreatetime from test1 where parentid=2 group by parentid
    ) b
    on a.parentid=b.parentid and a.createtime=b.maxcreatetime
    union all
    select * from test1 where parentid=0
    id name parentid createtime
    6 fff 2 2014-05-02 20:03:00.000
    1 aaa 0 2014-05-02 17:03:00.000
    2 bbb 0 2014-05-02 10:05:00.000
    3 ccc 0 2014-05-02 18:03:00.000
    4 ddd 0 2014-05-02 15:03:00.000
    7 ggg 0 2014-05-02 13:03:00.000
    8 hhh 0 2014-05-02 14:03:00.000