sql 查询某字段最大值对应的另一个字段的值

时间:2021-01-23 15:10:07
表:a

finterid      fitemid     fprice
  1             a           1
  2             b           2
  3             c           2
  4             a           3
  5             b           4
  .
  .
  .

finterid 字段没有重复的值

我自己写的语句使这样的:
select fitemid, max(FInterid),fprice   from a group by Fitemid,fprice order by a.fitemid
因为我把fprice也group  by 了,所以得出的结果的话,例如这个表,fitemid有有行值,
fprice不group by 的话,又语法错误~其他的聚合函数也没一个适用的,怎么办呢

11 个解决方案

#1


select *  from a t
where not exists(select 1 from a where t.fitemid=fitemid and t.FInterid<FInterid)

#2


不懂 你的意思》

#3


引用 1 楼 ldslove 的回复:
SQL code
select *  from a t
where not exists(select 1 from a where t.fitemid=fitemid and t.FInterid<FInterid)

你的select 1  又是什么意思

#4


楼主你是想要什么样的结果呢?

#5


price 字段不能为字符串
select * from a where(finterid in(selct max(fprice )from a group by Fitemid ))

#6


假如有最大值的记录是多笔怎么办哪?

实际上你需要在得出最大值的结果集上再链接查询出对应的记录。

#1楼 的结果就符合你的要求。
但是还是会存在对应最大值的记录有多笔的问题

#7


引用 6 楼 dongma_yifei 的回复:
假如有最大值的记录是多笔怎么办哪?

实际上你需要在得出最大值的结果集上再链接查询出对应的记录。

#1楼 的结果就符合你的要求。
但是还是会存在对应最大值的记录有多笔的问题


我要查的是finterid最大值对应过去的Fprice   

GROUP by 里面如果写上fprice的话,会用同一个fitemid 出现两个值

我就是想避免这种结果

#8


select a.* from 表a  a inner join (select  max(FInterid) as maxf from 表a group by fitemid) b on a.finterid=b.maxf


是不是这样?

听楼主的意思好像是取一个字段的最大值,然后根据这个最大值,取表中的记录,是这个意思吧
你先把最大值取出来,再根据最大值取值就可以了

#9


如果你要取的是finterid的最大值,那么直接这样就一了
select a.* from 表a  a inner join (select  max(FInterid) as maxf from 表a) b on a.finterid=b.maxf

#10


引用 9 楼 xyj052 的回复:
如果你要取的是finterid的最大值,那么直接这样就一了

SQL code
select a.* from 表a  a inner join (select  max(FInterid) as maxf from 表a) b on a.finterid=b.maxf


不行,没能得出我要的结果

#11



select a.fprice from a t1 inner join (select t1.fitemid, max(t1.FInterid) as finterid  from a t1 group by t1.Fitemid order by t1.fitemid) t2 on t1.fitemid = t2.fitemid and t1.finterid = t2.finterid

我先得出每个fitemid的最大值,再从里面分别找fprice,这样写提示
除非同时指定了 TOP,否则 ORDER BY 子句在视图、内嵌函数、派生表和子查询中无效。

#1


select *  from a t
where not exists(select 1 from a where t.fitemid=fitemid and t.FInterid<FInterid)

#2


不懂 你的意思》

#3


引用 1 楼 ldslove 的回复:
SQL code
select *  from a t
where not exists(select 1 from a where t.fitemid=fitemid and t.FInterid<FInterid)

你的select 1  又是什么意思

#4


楼主你是想要什么样的结果呢?

#5


price 字段不能为字符串
select * from a where(finterid in(selct max(fprice )from a group by Fitemid ))

#6


假如有最大值的记录是多笔怎么办哪?

实际上你需要在得出最大值的结果集上再链接查询出对应的记录。

#1楼 的结果就符合你的要求。
但是还是会存在对应最大值的记录有多笔的问题

#7


引用 6 楼 dongma_yifei 的回复:
假如有最大值的记录是多笔怎么办哪?

实际上你需要在得出最大值的结果集上再链接查询出对应的记录。

#1楼 的结果就符合你的要求。
但是还是会存在对应最大值的记录有多笔的问题


我要查的是finterid最大值对应过去的Fprice   

GROUP by 里面如果写上fprice的话,会用同一个fitemid 出现两个值

我就是想避免这种结果

#8


select a.* from 表a  a inner join (select  max(FInterid) as maxf from 表a group by fitemid) b on a.finterid=b.maxf


是不是这样?

听楼主的意思好像是取一个字段的最大值,然后根据这个最大值,取表中的记录,是这个意思吧
你先把最大值取出来,再根据最大值取值就可以了

#9


如果你要取的是finterid的最大值,那么直接这样就一了
select a.* from 表a  a inner join (select  max(FInterid) as maxf from 表a) b on a.finterid=b.maxf

#10


引用 9 楼 xyj052 的回复:
如果你要取的是finterid的最大值,那么直接这样就一了

SQL code
select a.* from 表a  a inner join (select  max(FInterid) as maxf from 表a) b on a.finterid=b.maxf


不行,没能得出我要的结果

#11



select a.fprice from a t1 inner join (select t1.fitemid, max(t1.FInterid) as finterid  from a t1 group by t1.Fitemid order by t1.fitemid) t2 on t1.fitemid = t2.fitemid and t1.finterid = t2.finterid

我先得出每个fitemid的最大值,再从里面分别找fprice,这样写提示
除非同时指定了 TOP,否则 ORDER BY 子句在视图、内嵌函数、派生表和子查询中无效。