select t.card_id,t.upload_time from CHRDATAUPLOAD t where
t.upload_time = (select max(t1.upload_time) from CHRDATAUPLOAD t1 where t1.card_id = t.card_id )
注:这里的card_id就是标题里说的id。     除了max(), 还有什么更加简便的,速度更加快的方法吗?

解决方案 »

  1.   


    SELECT * FROM (SELECT * FROM CHRDATAUPLOAD WHERE card_id=? ORDER BY upload_time  desc) WHERE ROWNUM =1先排序然后灾区第一条
      

  2.   

    --习惯这么写,不知道是不是好点,只扫描一次表。
    select c.card_id, c.upload_time
      from (select t.*,
                   --降序 max最先
                   row_number() over(partition by t.card_id order by t.upload_time desc) rn
              from CHRDATAUPLOAD t) c
     where rn = 1;
      

  3.   


    select t.card_id,t.upload_time from CHRDATAUPLOAD t where
    (t.card_id,t.upload_time) in  (select t1.card_id,max(t1.upload_time) from CHRDATAUPLOAD t1 group by t1.card
      

  4.   

    SELECT CARD_ID, UPLOAD_TIME
      FROM (SELECT T.CARD_ID,
                   T.UPLOAD_TIME,
                   MAX(UPLOAD_TIME) OVER(PARTITION BY CARD_ID) AS UPLOAD_TIME_
              FROM CHRDATAUPLOAD T) T
     WHERE UPLOAD_TIME_ = UPLOAD_TIME;
      

  5.   


    这样写有问题,如果所有的upload_time都一样,估计和您预期的结果就不同了。
    最简单粗暴的办法:
    select t.card_id,MAX(t.upload_time) upload_time from CHRDATAUPLOAD t GROUP BY t.card_id ;