2017-01-05 5 views
0

ここに私のテーブルsampletable4(ちょっとしたサンプル)があります。私のテーブルには、データ:MySql:印刷する行の数を制限する方法

 app_id latency -- app_id is char(255), latency is float 
    | 1111 | 0.940056 | 
    | 1110 | 0.261509 | 
    | 3211 | 0.0506242 | 
    || 0.468594 | 
    | 3110 | 0.191095 | 

APP_IDは文字列で、待ち時間がフロートで何百万ものです。待ち時間は、各アプリのAPI呼び出しの速さを測定します。

各app_idで最も遅い(または最高のレイテンシ)ものを印刷したいと思います。私のクエリは、最も遅い5%に制限されません。私は、クエリを各app_idの5%のうち最も遅いものに制限したい。

SELECT 
    latency 
    FROM sampleTable4 
    WHERE app_id = '5697' 
    ORDER BY latency DESC; 

それは '5697' APP_ID =のための具体的なケースである:

は、ここに私のクエリです。どのように変更して待ち時間の5%を印刷するのですか?

答えて

1
SELECT latency FROM (SELECT latency,(SELECT FLOOR(COUNT(*)*0.05) AS per_count 
    FROM sampleTable4 
    WHERE app_id = '5697' ) AS 5per_count,IF(@cnt=NULL,@cnt:=1,@cnt:[email protected]+1) AS cnt 
    FROM sampleTable4 ,(SELECT @cnt:=0) AS T 
    WHERE app_id = '5697' 
    ORDER BY latency DESC) FT  
    WHERE cnt<=5per_count 
+0

いいえ1つのクエリが必要です。 –

+0

LIMITは1つまたは2つの数値引数を取ります。これらは両方とも負でない整数定数でなければなりません(プリペアドステートメントを使用する場合を除く)。 – meet

+0

制限なしで.05を取得する方法はありますか? –

関連する問題