SQL语句如何写?高手请进(如果能帮我解决,我把所有的分都送上) (100分)

  • 主题发起人 主题发起人 lintel
  • 开始时间 开始时间
L

lintel

Unregistered / Unconfirmed
GUEST, unregistred user!
有一个表T,三个字段A,B,C
执行下语句:
select max(B) from T group by A
我得到了对应唯一的A最大的B值,但是我同时还想得到此情况下的C值,不知道该如何作?
先谢谢各位了。
 
select c, b from T where b = (select max(B) from T group by A)
 
你的方法得不到正确的结果,你可以试一下

同时也谢谢你的回答
 
照这样,c值应该有多个不同的值,怎么知道你要哪一个!?
 
是要多个啊,但是对应A取唯一值,下B取最大的情况下,C也是唯一的
 
SELECT B, C FROM T WHERE B IN (SELECT MAX(B) AS B FROM T GROUP BY A)
---------
我试过了!
 
select top 1 b,c from t
order by b desc
 
不太明白,有歧义:
1:select max(B),C from T group by A
select max(B) from T group by A,C
 
用exist运算符
做自连接
select b,c from t t1 where not exists(
select * from t t2 where t2.a=t1.a and t2.b>t1.b)
效率比in高
 
>>沉香屑
我用SQLServer的事件查看器看了一下,由于数据量不大,所以速度上没看出来!
但是CPU你的是0,我的用了10(反复验证过的)
你的的确要比我的(IN)占资源要少!(以后再也不用In了)
------------------
我不明白的是,你的查询应该同样是主查询中的每一条记录要和子查询中的每一条记录
进行比较(not exists),直到主查询中的记录EOF,为什么你的就不占资源呢!请教请教,
有空请你吃饭,嘻嘻!
------------------
我的那个贴子过几天就结了,谢谢关心(我的最后的方法连exists也不用,呵呵)
 
很简单
子查询不能利用索引
而exists能利用索引
况且你的子查询里还有聚集函数
一般情况下,in都可以用连接取代
如果没有索引的话,in的效率是比连接高的
 
select a,b,c,d from t order by a,b DESC
之后对结果集进行判断,如果a变化后取出b,c,d就是所要的结果
非常省时间
问题终于解决了。
谢谢大家的
 
这差不多是效率最低的方法
表如果比较大的话
不要说还对两个字段进行排序
整个表取到客户端都要花不少时间
还要遍历一次

 
非常快的,我40多万数据,大约5秒左右就搞定
 
select max(b),C from Table broup by A
 
dlc1977

你的语句能执行吗?你想过吗?你试一下就会有新的认识了。
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
I
回复
0
查看
608
import
I
后退
顶部