2012-03-05 20 views
0

私は、ジョインで作業する際に、密なランク関数の動作を明確にすることを望んでいます。私は以前の私のポストに大きな解決策を得ましたSQL Server recursive cte help wantedデータポイントが見つからないときにブレークを持つパーティションデータを内部結合と一緒に高密度ランクを使用することを含む解決策を見てみましょう。SQL Server高密度ランク/内部結合概念の明確化?

So:ソリューションをどのように読み取ったかに基づいて、内部結合では、高密度ランクは、左側にあるランキング行に含まれますが、右側には含まれません。私はこれの小さなテストを設定し、私はその動作を再現することはできません。たとえば、クエリを実行したときに、元のクエリと1/5/12のデータポイントにあるように、再度パーティションを作成せずにcteで基本選択ステートメントを使用すると、次のようになります。

TradeDate  Symbol Clse DenseRank RowNumber 
2012-01-03 A  36.48 1  1 
2012-01-04 A  36.19 2  2 
2012-01-06 A  37.40 4  3 

私の現在の理解に基づいて、上記の高密度ランク値は、結合がtblDailyPricingAndVolの日付の一致を返さないため、最後の2つのレコードで2から3になります。前もって感謝します。

+0

上記の例から、 'tblTradingDays'は' tblDailyPricingAndVol'と1対多の関係を持っています。 'tblDailyPricingAndVol'のすべての日付は' tblTradingDays'に存在します。 このように、前の例の結合ではレコードは削除されません。 –

+0

他のクエリの仕組みを誤解していると思います。 'dense_rank'値は結合で使用されません。パーティション節 '(r-r1)'で、連続する日付のグループを作成するために使用されます。 –

答えて

0

DENSE_RANKは、結果のをランク付けします。 Table2には2012-01-02が含まれていないため、結果は2行で、DENSE_RANKはランキング値12となります。

+0

ありがとうございました...私が現時点では見ていないのは、リンクを提供した例では、欠落している日付の値がランクで計算されているように見えます。 。私は私のポストを更新します.. – StatsViaCsh