2017-07-29 3 views
4

もう少し高度なSQLクエリを設定するのが難しいです。 私がやろうとしているのは、すべてのzr_miner_idの最後の24個のエントリを選択することですが、SQLタイムアウト(これまでのテーブルは約40000個のエントリがあります)が得られています。 zr_miner_idの件数が200件、zr_miner_id件の件数が200件でしたが、結果は48件でした。特定の非プライマリフィールドの最後のXエントリを選択するSQLクエリ

これまでのところ、私は以下の質問を考え出しました。 これは、zr_miner_idの新しいエントリが24個未満のzec_resultsの各結果を選択することです。 私はこのタスクを実行するためのより良い方法を考えることができませんでしたが、私はまだそれほどSQLに進んでいません。

SELECT results_a.* 
FROM zec_results results_a 
WHERE (
    SELECT COUNT(results_b.zr_id) 
    FROM zec_results AS results_b 
    WHERE results_b.zr_miner_id = results_a.zr_miner_id 
    AND results_b.zr_id >= results_a.zr_id 
) <= 24 

答えて

0

変数を使用してください!

SELECT r.* 
FROM (SELECT r.*, 
      (@rn := if(@m = r.zr_miner_id, @rn + 1, 
         if(@m := r.zr_miner_id, 1, 1) 
         ) 
      ) as rn 
     FROM zec_results r CROSS JOIN 
      (SELECT @m := -1, @rn := 0) params 
     ORDER BY r.zr_miner_id, r.zr_id DESC 
    ) r 
WHERE rn <= 24 ; 

クエリをビューに入れたい場合、上記は機能しません。あなたのアプローチのパフォーマンスは、(zr_miner_id, zr_id)のインデックスで改善されるかもしれません。

+0

あなたの答えをありがとう。これは私のスキルの範囲をはるかに超えています。私は次のエラーが表示されます:#1054 - フィールドリストの "FROM"の近くにある未知の列 'z.zr_miner_id'です。 –

+0

1.このタイプの句は以前に解析されました。 (位置194の "FROM"の近く) 2.認識できないステートメントタイプ。 (位置194の「FROM」の近く) –

関連する問題