假设有个人员表 :
agentNo(编号,主键) age(年龄) name(名字) gender(性别)
现在我要做这样的查询:
按年龄分组,每一个分组里面的第一个人的所有信息
分组里面数据的顺序是order by name desc
select a.*
from agent a,
(select max(agentNo) as agentNo from agent group by age) b
where a.agentNo = b.agentNo
这个是查询每一个分组里面编号最大的人的所有信息 但是后来发现不应该这样做,而是要
“每一个分组里面的第一个人的所有信息”
我现在想到一个方法,先把agent order by age,name desc 然后再把查询结果用group by 分组
但是后面那种想法有不明白的地方了,我先排好序,再group by 一分组,估计之前的顺序又打乱了,总之这写法蛋疼
我想问问有没有一步到位,不需要子查询的写法?
------解决方案--------------------------------------------------------
不用子查询估计不行。
参考下贴中的多种方法,不是DB2的,可以借鉴一下思路。
http://topic.csdn.net/u/20091231/16/2f268740-391e-40f2-a15e-f243b2c925ab
[征集]分组取最大N条记录方法征集,及散分....
------解决方案--------------------------------------------------------
如果你一定要用3楼的代码
select a.*
from agent a,
(
select a.* from agent a inner join
(select age,max(name)as ma from agent group by age ) b
on a.age=b.age and a.name=b.ma) c
where a.agentNo = c.agentNo
------解决方案--------------------------------------------------------
or
select a.*
from agent a,
(select agentNo as agentNo from agent c where
name=(select max(name) from agent where c.age=age)
) b
where a.agentNo = b.agentNo