1. 需求
name age score time
aaa 18 88 2016-08-01
aaa 18 89 2016-09-01
aaa 18 87 2016-06-01
bbb 19 63 2016-05-01
bbb 19 76 2016-03-01
bbb 19 43 2016-01-01
bbb 19 45 2016-04-01
ccc 20 100 2016-05-01
ccc 20 88 2016-10-01
name age score time
aaa 18 88 2016-08-01
aaa 18 89 2016-09-01
aaa 18 87 2016-06-01
bbb 19 63 2016-05-01
bbb 19 76 2016-03-01
bbb 19 43 2016-01-01
bbb 19 45 2016-04-01
ccc 20 100 2016-05-01
ccc 20 88 2016-10-01
2. 目的
本人需要当name,age相同的时候,得到最小的score,但是,必须附带对应的time值
假如这样写
select name,age,min(score),time from table group by name,age
这样写,可以得到name,age,score这些值是对的,但是time的值不对.
PS:分组字段之外的字段必须包含到聚合函数之内,否者就会顺序的取第一个值或随机取得一个.(这里的time就是顺序取得第一个,完全对不上)
3. 结果
name age score time
aaa 18 87 2016-06-01
bbb 19 43 2016-01-01
ccc 20 88 2016-10-01
解决方案
80
精华贴中的例子。
select *
from (select * from table order by name,age,score) t
group by name,age
select *
from (select * from table order by name,age,score) t
group by name,age