当前位置: 代码迷 >> DB2 >> 查询group分组内第一条数据的有关问题
  详细解决方案

查询group分组内第一条数据的有关问题

热度:5747   发布时间:2013-02-26 00:00:00.0
查询group分组内第一条数据的问题
假设有个人员表 :
  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
  相关解决方案