2011-08-17 14 views
0

テーブルからレコードを選択する必要がありますが、値が存在し、現在のレコードの値より1大きく、ユーザーが同じ場合に限ります。値が他のレコードに存在する場合、MySQL selectレコード

これは私の現在のテーブルです:

+---------+------------+-----------+ 
    | user_id | scheme_val | scheme_id | 
    +---------+------------+-----------+ 
    | 1 | text1 |  1  | 
    | 1 | text2 |  2  | 
    | 2 | text1 |  1  | 
    +---------+------------+-----------+ 

だから、基本的に、私は高いscheme_idと同じユーザから別のレコードが存在しない限り、すべてのレコードを選択する必要があります。したがって、このテーブルでは、最初の行ではなく、2番目と3番目の行だけが戻されます。なぜなら、ユーザー1の最初の行には、その行よりも大きいscheme_id 1を持つ別の行があるからです。

これは意味があると思いますか?

ありがとうございます。

+0

プライマリキーをお持ちですか? – Zeemee

+0

私はちょうどこのテーブルに置いていない、実際のテーブルはまた、おそらく最大100異なるuser_idとはるかに大きいです。私はちょっと試してみたいと思っています – Sean

答えて

0

は、次のクエリを試してみてください。それは確かに機能しますが、最適化されたものではありません。その箱から少し外れていますが、他の解決方法があれば、私は非常に興味があります。

SELECT 
    * 
FROM 
    users 
WHERE 
    CONCAT(user_id, ":", scheme_id) 
     IN 
      (
       SELECT 
        CONCAT(user_id, ":", MAX(scheme_id)) 
       FROM 
        users 
       GROUP BY 
        user_id 
      ) 
0

は、同じテーブルに参加する副問合せで可能なはずです:

select * from user u1 where u1.scheme_id = 
(select max(u2.scheme_id) from user u2 
    where u1.user_id = u2.user_id); 
関連する問題