--一个表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;
本帖最后由 wildwave 于 2011-06-23 20:27:13 编辑
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楼的写法有点不太理解!
select * from t_change a where not exists (select * from t_change b where a.grbh=b.grbh
where b.time>a.time);问这种问题的很多,看一下这个吧
降序排列时null会是第一个,所以当有null和非null的time,使用分析函数会拿了空的那条,不知道楼主的业务逻辑是否是这样的。另外,当null和非null同时存在,2楼的方法会拿了非null数据的最大值和null的那条,因为无论是null还是非null,子查询都会return false.
--一个表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;
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楼的写法有点不太理解!