2 linweijianzero linweijianzero 于 2017.07.03 14:37 提问

关于SQL查询GROUP BY MAX(KEY)带其他关联字段结果集
sql

图片说明

原先用

select key,max(value) from tbl group by key
查询出的结果,但是我要再多加一个TEST字段
应该怎么写SQL?性能尽可能好一点的。感谢

5个回答

fight_in_dl
fight_in_dl   Ds   Rxr 2017.07.03 16:37
已采纳

看似简单,还真不太好解决,想了半天,可以这样(测试已通过):

SELECT tb1.key,tb1.value,tb1.test FROM tb1 inner JOIN
(
    Select  key,Max(value) as newvalue
    FROM      tb1
    GROUP BY   key
)T

On T.key = tb1.key AND T.newvalue = tb1.value;
AcesLi
AcesLi 出现value相同就挂了
4 个月之前 回复
linweijianzero
linweijianzero 非常非常感谢您。
5 个月之前 回复
qq_26306781
qq_26306781   2017.07.03 14:42

select key,test,max(value) from tbl group by key,test

linweijianzero
linweijianzero 如果我把第5条数据,改成 KEY:2,VALUE:11,TEST:是 ,这样的话GROUP就抽不出我想要的数据了。。
5 个月之前 回复
linweijianzero
linweijianzero 这样不行的把。。。test字段怎么GROUP BY。。
5 个月之前 回复
wenw
wenw   2017.07.16 22:49

select * from
(
select row_number() over(partition by 'key' order by 'values' desc ) as rownum -- 排序并分组
, * -- 所需显示的字段
from 表
) as T
where T.rownum = 1
这样才是对的,取所有分组中指定值最大或者最小值的那一行的数据。

qq_24112277
qq_24112277   2017.07.03 15:11

select a.id,max(value),(select top 1 test from tbl b where b.id=a.id order by value desc) from tbl a group by id

linweijianzero
linweijianzero 回复CodeKind: 好的,感谢。大致意思我知道了
5 个月之前 回复
qq_24112277
qq_24112277 回复linweijianzero: select a.id,max(value),(select test from (select test from tbl b where b.id=a.id order by id desc) where rownum=1) from tbl a group by id 没装oracle你试试吧
5 个月之前 回复
linweijianzero
linweijianzero 用的是ORACLE数据库,不支持TOP1的
5 个月之前 回复
hangye007
hangye007   2017.07.03 17:20

select a.key,b.value,c.test from tbl a

inner join (select key,max(value) value from tbl group by key) b on b.key =a.key

inner join (select key,value,test from tbl) c on c.key=b.key and c.value=b.value

Csdn user default icon
上传中...
上传图片
插入图片