如果某列中的值重复,则从设置结果中检索一行

时间:2018-06-27 13:05:15

标签: mysql

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

------------------------
| 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 + have'搜索并尝试了一些技巧,并尝试在合并了“ insertignore”的那些列上创建索引,但无济于事。有人说这是否有可能?

更新: 最终提出解决方案,我在idyear上创建了索引,然后使用“ INSERT IGNORE INTO ...”制作了现有表的副本。

3 个答案:

答案 0 :(得分:1)

您可以对所需的数据集使用汇总

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

Demo

  

MIN()可以使用字符串参数;在这种情况下,它将返回最小字符串值

答案 1 :(得分:0)

您可以尝试从表中选择唯一值

SELECT DISTINCT column1, column2,.....columnN 
FROM table_name
  

祝你好运

答案 2 :(得分:0)

尝试一下

SELECT * FROM table_name GROUP BY id,;

注意:创建没有主键的表并将MySQL关键字用作表名(例如年份和数字)不是一个好习惯。 如果您仍然坚持使用年份和数字,请始终使用`进行封装。