2017-07-13 11 views
0

Row_number()は結果セットのパーティション内の行の連続番号を返します。各パーティションの最初の行は1から始まります。しかし、それは地下でどのように機能しますか?たとえば、ブックマークやインデックスを使用していますか?SQL ServerでROW_NUMBER()を使用する方法

よろしく

+0

Google翻訳のように見えるあなたや私の英語が私を失敗した失敗しました。私は最後の文を理解していません。 – Alex

+3

テーブルにインデックスがない場合、インデックスは使用できません。ブックマークは、インデックスを使用してクラスタ化インデックスを検索する場合にのみ使用されます。なぜ彼のシーンの背後でそれがどのように動作するかは重要ですか? –

+0

私はそれが行の数を返すためにどのように機能するのかを意味します。 1から100までの行を計算しますか?または、メモリのアドレスに番号を割り当てるなどの他の方法。 @Alex – TeigeGao

答えて

0
create table #test_rownumber 
(
name varchar(50) 
,score float 
,date_stamp varchar(20) 
) 

insert into #test_rownumber values('A',40,'2015-06-02') 
insert into #test_rownumber values('A',50,'2015-06-02') 
insert into #test_rownumber values('A',60,'2015-06-02') 
insert into #test_rownumber values('A',70,'2017-06-02') 
insert into #test_rownumber values('B',60,'2015-06-02') 
insert into #test_rownumber values('B',70,'2015-06-02') 
insert into #test_rownumber values('B',90,'2016-06-02') 
insert into #test_rownumber values('B',100,'2017-06-02') 


--you will see the row_number partion by name ,order by sore desc 
SELECT 
name 
,score 
,date_stamp 
,ROW_NUMBER() over(PARTITION by name order by score desc) as row_num 
from #test_rownumber 

--if you want to know the name and its' best score ,your may use that 
select 
name 
,score 
,date_stamp 
from(
SELECT 
name 
,score 
,date_stamp 
,ROW_NUMBER() over(PARTITION by name order by score desc) as row_num 
from #test_rownumber 
) a 
where row_num=1 
関連する問題