-1

表の例:

 id    foo   bar
 1      2    877
 2      2    877
 3      3    678
 4      4    887
 5      1    678
 6      2    887

結果の例:

 id    foo   bar
 3      3    678
 4      4    887
 5      1    678
 6      2    887

SQL は 2 と 887 の重複を無視しますが、最新のものは無視します。

Foo は事前に指定されます。

これは MYSQL でどのように達成できますか?

4

1 に答える 1

2

私があなたを正しく理解した場合、あなたは常に最高のbar値を望んでいます。fooid

select * 
  from your_table t1
 where id = (select max(id)  from your_table t2
                            where t2.foo = t1.foo) 

これがデモ用のSQLフィドルです。また、左結合を使用する別の方法も提供します。コンストラクトは、「最新のもの」が最も高いIDを持つものであると想定します。

編集:あなたのコメントによると、あなたはfoo = 2の「最高のID」だけが欲しい、それは単純なOR論理です。fooがnullになるかどうかわからないので、IS NULL条件を追加しました。そうし<>ないと、動作しない可能性があります。

select * from your_table t1
where  foo <> 2 or foo is null
   or  (foo = 2 and id = (select max(id)  from your_table t2
                                         where t2.foo = t1.foo) ) ;

これがデモです

于 2012-09-30T18:36:36.260 に答える