首先选择,然后忽略两列中的值相同的行

时间:2012-09-30 17:18:59

标签: mysql sql

示例表:

 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中实现这一目标?

1 个答案:

答案 0 :(得分:2)

如果我找到了你,你总是希望bar值为foo id。{/ p>

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是否可以为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) ) ;

这是demo