一个表T_change(grbh,change_type,time),能否用一个语句实现用grbh分组,time取最大值,change_type取time最大值对应的同一行的change_type?

解决方案 »

  1.   

    select grbh,change_type,time from(select grbh,change_type,time,row_number()over(partition by grbh order by time desc) rn from t_change) where rn=1
      

  2.   

    --很多种写法了,写一种基本的
    select * from t_change a where not exists (select * from t_change b where a.grbh=b.grbh
    where b.time>a.time);问这种问题的很多,看一下这个吧
      

  3.   

    1楼和2楼的方法都不错,值得学习。不知道time是否有空值,如果同一个grbh有null和非null的time,最好处理一下空值的情况。
    降序排列时null会是第一个,所以当有null和非null的time,使用分析函数会拿了空的那条,不知道楼主的业务逻辑是否是这样的。另外,当null和非null同时存在,2楼的方法会拿了非null数据的最大值和null的那条,因为无论是null还是非null,子查询都会return false.
      

  4.   


    --一个表T_change(grbh,change_type,time),能否用一个语句实现用grbh分组,time取最大
    --值,change_type取time最大值对应的同一行的change_type?
    select grbh,max_time,change_type
      from(select grbh,max(time)over(partition by grbh) max_time,change_type,time
             from T_change)
     where max_time = time;
      

  5.   

    本帖最后由 wildwave 于 2011-06-23 20:27:13 编辑
      

  6.   


    select aa.grbh,aa.maxtime,(select bb.change_type from t_change bb where bb.time=aa.maxtime) from 
    (
    SELECT A.GRBH, MAX(A.TIME) MAXTIME FROM t_change A GROUP BY A.GRBH
    ) aa
    其实2楼的写法有点不太理解!