我有一个表,表结构如下:
    对象名称(objName)    最新接收时间(receiveDate)     本批记录最后时间(lastDate)
       Order                 2005-12-01 12:20:10            2005-10-01 20:30:31
       Order                 2005-12-15 12:20:10            2005-10-13 20:30:31
       Order                 2005-12-30 09:20:10            2005-11-13 20:30:31
       Return                2005-12-01 12:20:09            2005-09-01 20:30:31
       Return                2005-12-15 12:31:10            2005-10-21 25:30:31
该表保存了很多对象如:订单,退单....的记录。
   我想获得每个对象一条记录,但该条记录中最新接收时间最本对象最新的。
      在上面记录中结果希望如下:
      Order                 2005-12-30 09:20:10            2005-11-13 20:30:31
      Return                2005-12-15 12:31:10            2005-10-21 25:30:31可以通过多条语句得到,我希望一条语句,并且效率要比较高。
谢谢各位!!!

解决方案 »

  1.   

    SQL>    create table TESTTAB
      2  (
      3    COL1 VARCHAR2(20),
      4    COL2 VARCHAR2(20),
      5    COL3 VARCHAR2(20)
      6  );Table createdSQL> 
    SQL>    INSERT INTO testtab VALUES('Order','2005-12-01 12:20:10','2005-10-01 20:30:31');1 row insertedSQL>    INSERT INTO testtab VALUES('Order','2005-12-15 12:20:10','2005-10-13 20:30:31');1 row insertedSQL>    INSERT INTO testtab VALUES('Order','2005-12-30 09:20:10','2005-11-13 20:30:31');1 row insertedSQL>    INSERT INTO testtab VALUES('Return','2005-12-01 12:20:09','2005-09-01 20:30:31');1 row insertedSQL>    iNSERT INTO testtab VALUES('RETURN','2005-12-15 12:31:10','2005-10-21 25:30:31');1 row insertedSQL> commit;Commit completeSQL> SELECT DISTINCT col1 AS col1,MAX(col2),MAX(col3) FROM testtab GROUP BY  col1;COL1                 MAX(COL2)            MAX(COL3)
    -------------------- -------------------- --------------------
    Order                2005-12-30 09:20:10  2005-11-13 20:30:31
    Return               2005-12-15 12:31:10  2005-10-21 25:30:31SQL>
      

  2.   

    上面脚本有点问题: iNSERT INTO testtab VALUES('RETURN','2005-12-15 12:31:10','2005-10-21 25:30:31'); 应该改为: iNSERT INTO testtab VALUES('Return','2005-12-15 12:31:10','2005-10-21 25:30:31');
    执行结果才应改正确!
      

  3.   


    select objName,receiveDate,lastDate
    from (select t.*,row_number() over(partition by objName order by receiveDate desc) rn from tablename t)
    where rn = 1
      

  4.   

    同意duanzilin(寻),用分析函数最好
      

  5.   

    select objName,receiveDate,lastDate
    from (select t.*,row_number() over(partition by objName order by receiveDate desc) rn from tablename t)
    where rn < 3
    你就可以取的每个用户的最近的两条记录.以此类推.