select  b.*  from (
select  姓名 ,max(id)  from  表  group by  姓名 
) a  
left  outer join 表  b  on a.id=b.id

解决方案 »

  1.   


    WITH test AS (
    SELECT 'Jack' 姓名,89 语文,'20100701' 录入时间 FROM dual UNION ALL
    SELECT 'Tom' 姓名,90,'20100701' 录入时间 FROM dual UNION ALL
    SELECT 'John' 姓名,98,'20100701' 录入时间 FROM dual UNION ALL
    SELECT 'Smith' 姓名,89,'20100701' 录入时间 FROM dual UNION ALL
    SELECT 'Tom' 姓名,79,'20110125' 录入时间 FROM dual UNION ALL
    SELECT 'John' 姓名,99,'20110125' 录入时间 FROM dual UNION ALL
    SELECT 'Tom' 姓名,86,'20110125' 录入时间 FROM dual
    )
     SELECT TEST.*
       FROM TEST,
            (SELECT MAX(录入时间) AS 录入时间, 姓名 FROM TEST GROUP BY 姓名) C
      WHERE TEST.姓名 = C.姓名
        AND TEST.录入时间 = C.录入时间
      

  2.   

    Quote: 引用 3 楼 ddfreedom 的回复:

    表结构竟然没有主键,要是一个学生同一天录了2条数据  ....[/qu
    兄弟多心了,我只是举个例子,没有主键的话真心么得玩了
      

  3.   

    select t.* from table1 t
    where t.id in(
    select max(a.id) from table1 a group by a.id
    )
      

  4.   


    查看上面的规律,貌似要得到的结果是最新录入的那条记录:
    select a.,a.学号 a.姓名,a.语文,a.数学 ,a. 英语,a.录入时间 from t_test a,(select 姓名,max(录入时间) as 录入时间 from t_test group by 姓名 ) b
    where a.姓名=b.姓名 and a.录入时间=b.录入时间;