table表里有字段 a b c d 如下    a      b    c     d
2001-1-1  123  张三   备注
2001-1-1  123  李四   备注
2002-1-1  123  张三   备注
2003-1-1  123  李四   备注我要通过查询 如果c字段相同的话 只取时间最大的 查询结果要如下
    a      b    c     d
2003-1-1  123  李四   备注
2002-1-1  123  张三   备注该如何写。。谢谢

解决方案 »

  1.   

    select a,b,c,d
    from (select a,b,c,d,
     ROW_NUMBER() OVER (PARTITION BY c ORDER BY a desc) as rn from table)
    where rn=1
      

  2.   

    怎么发了2个帖子--------- 建表
    CREATE TABLE TABLE_A
    (A DATE,
    B INTEGER,
    C VARCHAR2(10),
    D VARCHAR2(10)

    --------- 测试数据
    INSERT INTO TABLE_A VALUES(TO_DATE('2001-1-1','YYYY-MM-DD'),'123','张三','备注');
    INSERT INTO TABLE_A VALUES(TO_DATE('2001-1-1','YYYY-MM-DD'),'123','李四','备注');
    INSERT INTO TABLE_A VALUES(TO_DATE('2002-1-1','YYYY-MM-DD'),'123','张三','备注');
    INSERT INTO TABLE_A VALUES(TO_DATE('2003-1-1','YYYY-MM-DD'),'123','李四','备注');
    COMMIT;
     --------- SQL
    SELECT A,
           B,
           C,
           D
      FROM (SELECT TABLE_A.*,
                   ROW_NUMBER() OVER(PARTITION BY C ORDER BY A DESC) AS R
              FROM TABLE_A)
     WHERE R <= 1  ----- 可以用 R<= N来确定取前N条记录
    ----------  结果
    A B C D
    2003-1-1 123 李四 备注
    2002-1-1 123 张三 备注
      

  3.   

    select * from (select max(a),t.c,t.b,t.d from table_a t group by t.c,t.b,t.d)tt ;