求助这个SQL语句该怎么写
表名:abc
字段:a(char),b(int),c(int)
表中的数据
ggg 1 1
ggg 2 2
ggg 2 3
hhh 1 1
hhh 2 2
查询结果只需要 a和c字段的值,a字段的值不重复(只取b值和c值都最大的那一条记录)
也就是说,查询的结果(只显示字段a和c)应该为:
ggg 3
hhh 2
select a,c from abc where a不重复 and b最大 and c最大
Where后面应该怎么写?请帮忙,谢谢!
------解决方案--------------------select a,max(c) from abc group by a
------解决方案--------------------select a,max(c) from abc where b(此处加条件) group by a
------解决方案----------------------group by 分组语句可以设置数据分组前跟分组后的条件,分别是where 跟 having
select a,max(c) from abc where 此处为分组前的条件 group by a having 此处为分组后的条件
------解决方案----------------------方法一
select * from abc t where not exists(select 1 from abc where a=t.a and c> t.c)
--方法二
select * from abc t where c in (select max(c) from abc group by a)
--方法三
select * from abc t where c =(select max(c) from abc where a=t.a)
------解决方案--------------------SELECT A.a,Max(A.c)
FROM abc A
INNER JOIN (SELECT a,MAX(b) AS bb FROM abc GROUP BY a ) AS B ON
A.a = B.a AND A.b = B.bb
GROUP BY A.a
------解决方案--------------------declare @abc table
(a char(10),b int,c int)
insert into @abc
select 'ggg ', 1 , 1
union all select 'ggg ', 2 , 2
union all select 'ggg ', 2 , 3
union all select 'hhh ', 1 , 1
union all select 'hhh ' , 2 , 2
select * from @abc t
where not exists
(select 1 from @abc where a=t.a and ((b=t.b and c> t.c) or b> t.b))
----------------
ggg 2 3
hhh 2 2
------解决方案--------------------SELECT c.a, c.c
FROM
(
SELECT a, b, MAX(c) c
FROM @abc a2
GROUP BY a, b
) c
INNER JOIN
(
SELECT a, MAX(b) b
FROM @abc a2
GROUP BY a
) b ON c.a = b.a AND c.b = b.b
------解决方案--------------------select
t.*
from
abc t
where
not exists(select 1 from abc where a=t.a and (b> t.b or c> t.c))
------解决方案--------------------其实我的意思是查询记录的时候先满足b最大的条件,假如有多行记录,则取c最大的那一条。
-------------------
select * from abc
ggg 12 2
ggg 13 1
ggg 2 6
hhh 10 9
hhh 11 1
--------------------
select a,max(c) from abc where b in (select max(b) from abc group by a) group by a
ggg 1
hhh 1
应该是楼主你要的结果了
------解决方案--------------------看看这个
with myTemp(a,b,c) as (select a,max(b),max(c) from dbo.abc where 1=1 group by a)
select a,c from myTemp
------解决方案----------------------方法一
select * from abc t where not exists(select 1 from abc where a=t.a and c> t.c)