MySQL获取重复行的最后一次出现

时间:2015-05-17 17:58:38

标签: mysql

首先,我想对所有正在考虑问题的人表示感谢,并且说,我对SQL一般都是新手。其次,我希望这不是一个重复的问题。我经常搜索并尝试了很多,其他人试图完成并失败了。

我尝试获取与相同订单号匹配的行的最后一次出现。我已经尝试了在id和内部连接上使用max()进行分组,所以有些东西真的不在墙上。

我接近的几次是当我得到最高的id,但其余的匹配第一次出现。

id | oldValue | newValue | orderNumber
--------------------------------------
1  | 123      | 345      | 12345
2  | 0        | 335      | 12345
3  | 234      | 235      | 34567
4  | 435      | 465      | 45678
5  | 543      | 1235     | 45678
6  | 543      | 578      | 45678
7  | 456      | 23464    | 12222
8  | 233      | 45765    | 14444
9  | 3456     | 6574     | 33345

输出看起来像。

id | oldValue | newValue | orderNumber
--------------------------------------
2  | 0        | 335      | 12345
3  | 234      | 235      | 34567
6  | 543      | 578      | 45678
7  | 456      | 23464    | 12222
8  | 233      | 45765    | 14444
9  | 3456     | 6574     | 33345

我不想删除任何信息。我看到这是一个非常受欢迎的选择,对于我遇到的同样类型的问题。我需要保留所有日期。

对于如何解决这个问题的任何想法都非常感激,或者是我可以做更多研究的资源。

1 个答案:

答案 0 :(得分:1)

您的问题可以通过简单的查询解决:

select t.* 
from your_table t
join(
   select 
      max(id) as id
   from your_table
   group by orderNumber
) x on x.id = t.id

内部子查询仅返回每个orderNumber的最大ID。