首页 > 解决方案 > 如果某列中的值重复,则从设置结果中检索一行

问题描述

如果某些列中有重复项,我想从表中检索一条记录,如下所示:

------------------------
| id | year |  number  | 
| 1  | 2018 |    I     |
| 1  | 2018 |    II    |
| 1  | 2017 |    I     |
| 1  | 2016 |    II    |
| 2  | 2017 |    I     |
| 2  | 2017 |    II    |
| 2  | 2016 |    I     |
| 2  | 2016 |    II    |
| 2  | 2015 |    II    |
------------------------

desired output

------------------------
| id | year |  number  | 
| 1  | 2018 |    I     |
| 1  | 2017 |    I     |
| 1  | 2016 |    II    |
| 2  | 2017 |    I     |
| 2  | 2016 |    I     |
| 2  | 2015 |    II    |
------------------------

我已经用谷歌搜索并尝试了“group by + having”的技巧,并尝试在这些列上创建索引,并结合“插入忽略”但无济于事。有人说这是否可能?

更新: 终于想出了解决方案,我在idand上创建了索引year,然后使用“INSERT IGNORE INTO ...”复制了现有表。

标签: mysql

解决方案


您可以对所需数据集使用聚合作为

select id, `year`, min(`number`)
from your_table
group by id, `year`
order by id,`year` desc 

演示

MIN()可以接受一个字符串参数;在这种情况下,它返回最小的字符串值


推荐阅读