2011-01-26 10 views
1

私のデータで特定のパーセンタイルの境界を見つけることを試みています。つまり、10%の値にはどのような値がありますか。トップ10%。TOP n PERCENTクエリの最後のレコードを取得する

SELECT TOP 10 PERCENT [Time] 
    FROM Scores 
    WHERE Lesson = 1 
    ORDER BY [Time]; 

を...そして最後のレコードを参照すると、返さ:

私は、次のようなクエリを実行することによって、その値を得ることができます。

誰かが私が直接その値を取得するために実行できるクエリを知っていますか? ORDER BY句は、上記のサブクエリとして実行できなかったため、すべての問題を引き起こしていると思われ、すでにクエリの不可欠な部分であるという事実により、それを使って下位レコードを取得することはできません。私は簡単な方法がなければならないと確信しています。

ありがとうございます。

答えて

4

あなたは一番上の行を選択するために、外側のクエリを使用することができます。

SELECT TOP 1 Time 
FROM ( 
     SELECT TOP 10 PERCENT [Time] 
     FROM Scores 
     WHERE Lesson = 1 
     ORDER BY 
       Time 
     ) as Top10 
ORDER BY 
     Time DESC 
+0

に[時間]の最小値を返します。唯一の問題は、SQL Server(2008)を使用しているため、サブクエリのエイリアスを追加する必要がありました。そのため、終了括弧の後に「AS Top10」を追加しました。私が使っているものを指定しなかったため、私のせいです。再度、感謝します! – BinarySolo

+0

@BinarySolo:これはほとんどのデータベースに当てはまりますが、回答は編集されました; – Andomar

0
SELECT MIN(Time) 
FROM ( 
     SELECT TOP 10 PERCENT [Time] 
     FROM Scores 
     WHERE Lesson = 1 
     ORDER BY 
       Time 
) 

これは、おかげで動作します上位10%値

+0

ありがとう、この場合、この場合、MINではなくMAXが必要です。私はどちらが速いのだろうか、これまたはAndomar's? – BinarySolo

+0

ベンチマークして見つけてください! –