SQL MAX()后取其对应的一条记录

来源:百度知道 编辑:UC知道 时间:2024/06/16 19:23:55
CREATE TABLE #TMP
(
NameGroup varchar(10),
sName varchar(10),
number int
)
GO

INSERT INTO #TMP
SELECT '生活用品','牙刷',20 UNION ALL
SELECT '生活用品','肥皂',30 UNION ALL
SELECT '生活用品','牙刷',40 UNION ALL
SELECT '食品','苹果',30 UNION ALL
SELECT '食品','鸭梨',20

SELECT * from #TMP

我想查出这个表的数据的一个 NameGroup 里面最多数量的那个 sName,
比如下面这种数据结果。
NameGroup sName number
生活用品 牙刷 40
食品 苹果 30

该怎么写? 用max() 只能找到最多的数量,但是无法对应NameGroup

SELECT
S.NameGroup
,sName=(SELECT sName from @TMP WHERE NameGroup = S.NameGroup AND Number = MAX(S.Number))
,max(s.Nmuber) as Number
from #TMP S
group by S.NameGroup

select sName,NameGroup,number from #tmp where number in (select max(number) from #tmp)
不知道对不对 。。。

select top 1 NameGroup, sName,number from (
select NameGroup, sName, number from tmp order by numder desc)

select top 1 sName from #TMP order by convert(int,NameGroup) desc
用convert 转换类型就行了
第一个参数是 要转换的类型

要分两步.
第一步:找出每个NameGroup里,数量最多的数量
select NameGroup,max(number) as number into #a from #TMP
group by NameGroup;
第二步:通过关联,得到所需要的结果
select b.NameGroup,a.sName,b.number from #TMP a,#a b
where a.NameGroup=b.NameGroup and a.number =b.number;

select a.NameGroup,a.sName,t.number from #TMP a,
(select NameGroup,max(number) as number from #TMP group by NameGroup)T
where a.NameGroup=t.NameGroup and a.number =t.number;