2016-03-26 6 views
0

は、私はそれらの2つのテーブルを持っている playertimesJOINでDISTINCTを使用するにはどうすればよいですか? <br> <code>users</code>:<br> <a href="https://i.stack.imgur.com/IsnKv.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/IsnKv.png" alt="users"></a></p> <p>そして<code>playertimes</code>:

(私はjumpsstyleintなくvarchar()する必要があります知っているが、それは私が解決しようとしているものではないのです)

結果セット内で次の結果を返すことになっているクエリがあります: -

  1. name取り出さauth
  2. time
  3. style

ここに私の現在のクエリだとJOINを使用して:ここで
SELECT p.style, p.time, u.name FROM playertimes p JOIN users u ON p.auth = u.auth WHERE p.map = 'bhop_good' ORDER BY p.time ASC;

は、私は、クエリで取得していた結果です上記:このとき current query result

、テーブルのみ0又は1あるstyleの2つの可能な値を含んでいることができます。私が探しているのは、styleDISTINCTにすることです。私の場合、上のクエリの2つの結果(styleの値ごとに1行)を取得するには、次のようなスクリーンショットが必要です。

ideal resultset

ありがとうございました!

+1

この回答を確認:http://stackoverflow.com/questions/12113699/get-top-n-records-for-each-group-of-grouped-results – Reversal

+0

をさらに識別するための符号なし整数を使用することを検討してくださいdb内のユーザー:スペースが少なくて済み、処理がはるかに簡単です。 – Reversal

答えて

1

styleの値のそれぞれがtimeの値のそれぞれに対してstyleの行が必要なようです。

あなたはそうそうです。それは2つのステップを必要とします。最初は、各値

  SELECT style, MIN(time) time 
      FROM playertimes 
      GROUP BY style 

第2のステップは、その時点に対応する実際のplayertimes行を取得するための最小時間を決定します。

SELECT p.style, s.time, p.auth 
     FROM playertimes p 
     JOIN (
      SELECT style, MIN(time) time 
      FROM playertimes 
      GROUP BY style 
      ) s ON p.style = s.style AND p.time = s.time 

最後に、あなたはname欄にあなたのauth列を回すためにあなたのusersテーブルにその多くに参加することができます。

SELECT p.style, s.time, u.name 
     FROM playertimes p 
     JOIN (
      SELECT style, MIN(time) time 
      FROM playertimes 
      GROUP BY style 
      ) s ON p.style = s.style AND p.time = s.time 
     JOIN users.u ON p.auth = u.auth 

そして、もちろん、あなたが作業クエリを持っていたら、あなたはこの1のように、それにWHERE句を追加することができます。

WHERE p.map = 'some constant' 
関連する問題

 関連する問題