-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

如果我说对了,您总是希望bara 的值foo最高id

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

这是一个用于演示的SQL Fiddle 。它还提供了一种左连接的替代方法。该构造确实假定“最新的”是具有最高 id 的那个。

编辑:所以根据你的评论,你只想要 foo=2 的“最高 id”,这是一个简单的OR逻辑。我不知道 foo 是否可以为空,所以我添加了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 回答