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

lj19860802 2010-06-24 10:14:29
表: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 的话,又语法错误~其他的聚合函数也没一个适用的,怎么办呢
...全文
3596 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lj19860802 2010-06-24
  • 打赏
  • 举报
回复

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 子句在视图、内嵌函数、派生表和子查询中无效。
lj19860802 2010-06-24
  • 打赏
  • 举报
回复
[Quote=引用 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
[/Quote]

不行,没能得出我要的结果
xyj052 2010-06-24
  • 打赏
  • 举报
回复
如果你要取的是finterid的最大值,那么直接这样就一了
select a.* from 表a  a inner join (select  max(FInterid) as maxf from 表a) b on a.finterid=b.maxf
xyj052 2010-06-24
  • 打赏
  • 举报
回复
select a.* from 表a  a inner join (select  max(FInterid) as maxf from 表a group by fitemid) b on a.finterid=b.maxf


是不是这样?

听楼主的意思好像是取一个字段的最大值,然后根据这个最大值,取表中的记录,是这个意思吧
你先把最大值取出来,再根据最大值取值就可以了
lj19860802 2010-06-24
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 dongma_yifei 的回复:]
假如有最大值的记录是多笔怎么办哪?

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

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

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

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

我就是想避免这种结果
随风 2010-06-24
  • 打赏
  • 举报
回复
假如有最大值的记录是多笔怎么办哪?

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

#1楼 的结果就符合你的要求。
但是还是会存在对应最大值的记录有多笔的问题
swhong5481310 2010-06-24
  • 打赏
  • 举报
回复
price 字段不能为字符串
select * from a where(finterid in(selct max(fprice )from a group by Fitemid ))
nightmaple 2010-06-24
  • 打赏
  • 举报
回复
楼主你是想要什么样的结果呢?
lj19860802 2010-06-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ldslove 的回复:]
SQL code
select * from a t
where not exists(select 1 from a where t.fitemid=fitemid and t.FInterid<FInterid)
[/Quote]
你的select 1 又是什么意思
修改一下昵称 2010-06-24
  • 打赏
  • 举报
回复
不懂 你的意思》
东那个升 2010-06-24
  • 打赏
  • 举报
回复
select *  from a t
where not exists(select 1 from a where t.fitemid=fitemid and t.FInterid<FInterid)

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧