求一个SQL语句,请大家帮帮忙 ( 积分: 100 )

  • 主题发起人 主题发起人 tonyliu
  • 开始时间 开始时间
T

tonyliu

Unregistered / Unconfirmed
GUEST, unregistred user!
假设表如下<br><br>id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;amt<br>1001&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;12<br>1001&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;43<br>1001&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;56<br>1001&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;554<br>1001&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;855<br>1001&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;98<br>1002&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;53<br>1002&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;72<br>1002&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;213<br>1002&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;971<br>1002&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;78<br>1002&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;901<br>1002&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;155<br>1002&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;532<br>现在要选出1001和1002中amt排名最大的前三条记录,即得出的结果是<br>1001&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;855<br>1001&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;554<br>1001&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;98<br>1002&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;971<br>1002&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;901<br>1002&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;532<br>请教各位大虾,这样的SQL语句怎么写?不胜感激
 
SELECT&nbsp;DISTINCT&nbsp;*&nbsp;FROM&nbsp;TAB&nbsp;AS&nbsp;A&nbsp;WHERE&nbsp;A.AMT&nbsp;IN&nbsp;(SELECT&nbsp;TOP&nbsp;3&nbsp;AMT&nbsp;FROM&nbsp;TAB&nbsp;AS&nbsp;B&nbsp;WHERE&nbsp;A.ID=B.ID&nbsp;ORDER&nbsp;BY&nbsp;B.AMT&nbsp;DESC)
 
hfqxfx,当ID有好几百万个你怎么办?这样不行啊
 
select&nbsp;*&nbsp;from&nbsp;tab&nbsp;a<br>where&nbsp;(select&nbsp;count(*)&nbsp;from&nbsp;tab&nbsp;b&nbsp;where&nbsp;a.id&nbsp;=&nbsp;b.id&nbsp;and&nbsp;a.amt&nbsp;&lt;=&nbsp;b.amt)&nbsp;&lt;=&nbsp;3
 
select&nbsp;*&nbsp;from&nbsp;tab&nbsp;as&nbsp;a&nbsp;where&nbsp;a.amt&nbsp;in&nbsp;(select&nbsp;top&nbsp;3&nbsp;amt&nbsp;from&nbsp;tab&nbsp;as&nbsp;b&nbsp;where&nbsp;a.id=b.id&nbsp;order&nbsp;by&nbsp;b.amt&nbsp;desc)
 
后退
顶部