表结构如下
 message 表
 id(varchar2)  receivetime(date) projectid(varchar2)
     1              2009-1-1             1
     2              2009-1-2             1
     3              2009-1-1             2
     4              2009-1-3             2现在想根据projectId分组,取出每个projectId里面receivtime的最大时间,并且返回这个表的所有字段,
例如根据以上要求,上面的结果为:
     id(varchar2)  receivetime(date) projectid(varchar2)
     2              2009-1-2             1
     4              2009-1-3             2
怎么弄呀,急急急
 

解决方案 »

  1.   

    select id, receivetime, projectid from message t1
    where not exists (
    select receivetime from message t2 where t1.projectid = t2.projectid and t2.receivetime > t1.receivetime);
      

  2.   

    SELECT * 
    FROM
    MESSAGE 
    WHERE (receivetime,projectid) IN
    (
    SELECT MAX(receivetime) MAXTIME,projectId
    from message
    group by projectId
    );
      

  3.   

    select id,max(receivetime),projectid from message group by id,projectid;
    试试可以不
      

  4.   

    楼上的没有根据projectId分组,结果还是不行
      

  5.   

    select max(id),max(receivetime),projectid from message t group by t.projectid  也可以吧。。
      

  6.   

    感谢大家,不过还存在一个问题,就拿2楼的来说,现在我想加字段taskid,按照二楼的写法就可能会出现projectid重复记录,大家帮帮忙吧,谢了
      

  7.   

    我是按照你原帖写的sql,如果你要加taskid的话,请把taskid加上后的需求描述一下。谢谢!
      

  8.   

    还有比如receivetime,projectid都相等的值在表里面有多条,二楼的sql就不行了
      

  9.   

    你把你的TASKID 字段增加上去,再看看吧!@
    请把你的描述再清晰化点
      

  10.   

    SELECT * 
    FROM
    MESSAGE 
    WHERE ID =
    (
    SELECT MAX(ID),MAX(receivetime) ,projectid
    from MESSAGE
    group by projectid,receivetime
    );
      

  11.   

    感谢大家,最终答案是1楼的,呵呵,不过2楼的sql也给了我启发,结贴了