2014-07-07 41 views
0

我有,作爲查詢,值的一串不同對的一部分:SQL索引

a  d 
a  e 
a  f 
b  g 
b  h 
c  i 

我想能夠計算計數器相對於第一場的:

a  d  1 
a  e  2 
a  f  3 
b  g  1 
b  h  2 
c  i  1 

我不能使用的位置在臨時表 - 二話不說它會太高,而我需要去不了了2個位數(中值並沒有將是更加超過50個條目與第一個字段相同。是否有任何方法或技術可以幫助?

感謝您的幫助!

+0

什麼RDBMS您使用的加入? – Barmar

+2

爲了避免混淆,我建議改寫你的問題,因爲_index_在討論數據庫時有着非常明顯的含義。我們將其命名爲_position_或_counter_? – abl

+1

我想你的意思是group_內的_row數字。 – Barmar

回答

1
select t1.c1 , t1.c2 , count(t2.c1) cnt 
from mytable t1 
join mytable t2 on t1.c1 = t2.c1 and t1.c2 >= t2.c2 
group by t1.c1, t1.c2 
order by t1.c1, cnt 

Demo

說明

此查詢假定對(c1,c2)是獨一無二的。

若要對每行(c1,c2)進行排名,查詢將計算組c1中的行數,其中c2小於或等於c2。例如,對於(a,e),組a內有2行小於或等於e(即de)。

+0

你能解釋一下這個代碼如何回答這個問題嗎? – apaul

+0

你問的查詢是如何工作的? – FuzzyTree

+0

任何解釋都會很好,只包含代碼塊的答案並不總是像寫作它的人那樣自我解釋。 – apaul