示例表:
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中实现这一目标?
答案 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