Mysql 每个唯一字段值获取一行SQL

Mysql 每个唯一字段值获取一行SQL,mysql,sql,Mysql,Sql,我在其他地方找到了这个问题的几个答案,但是我无法将这些答案真正应用到我的特殊情况中 让我们看下表: ID | Name | Item | Year ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ 1 | Dan | Chlorine | 2014 2 | Dan | Oxygen | 2013 3 | Jon | Helium | 2014 4 | Jon | Aluminum |

我在其他地方找到了这个问题的几个答案,但是我无法将这些答案真正应用到我的特殊情况中

让我们看下表:

ID |   Name   |    Item    | Year
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
1  | Dan      | Chlorine   | 2014
2  | Dan      | Oxygen     | 2013
3  | Jon      | Helium     | 2014
4  | Jon      | Aluminum   | 2015
5  | Dan      | Propane    | 2014
6  | Dan      | Chlorine   | 2016
我要找的是一个返回Dan所有记录的查询,但我只想在有重复项的情况下按年份返回最新记录,不可能出现平局

因此,对于上表,我希望返回以下内容:

ID |   Name   |    Item    | Year
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
2  | Dan      | Oxygen     | 2013
5  | Dan      | Propane    | 2014
6  | Dan      | Chlorine   | 2016
目前,我有以下查询,只需按年份对Dan的所有项目进行排序:

SELECT * FROM `table` WHERE `Name` = `Dan` ORDER BY `Year` DESC;

我如何进一步做到每年只获得一行每件商品?

我最后得出以下结论:

DROP TABLE IF EXISTS tmp_table;

CREATE TABLE tmp_table as
SELECT * FROM `table` WHERE 1=0;

ALTER TABLE tmp_table
  ADD UNIQUE INDEX UK_tmp_table (Name, Item);

INSERT IGNORE INTO tmp_table(ID, Name, Item, Year)
SELECT ID, Name, Item, YEAR FROM `table` WHERE Name = 'Dan' ORDER BY `Year` DESC;

SELECT * FROM tmp_table ORDER BY ID;
SELECT * FROM ( SELECT *
                FROM `table`
                WHERE `Name` = 'Dan'
                ORDER BY `year` DESC
               ) as t1
          GROUP BY `Name` DESC;

这里和其他地方有数千个答案适用于您的具体情况。从t1中选择*,其中名称、项目、年份在选择名称、项目、maxyear中,从t1中选择名称='Dan'按名称分组,项目。如果项目、年份和名称有重复项,请使用distinct。我忽略了优化。如果最新的总是与一个更大的id相关,那么查询可以简化,并且假设id是一个键,查询可能会更有效。不过我还是比较保守[除非OP澄清],因为有时候数据修正是在数据库中进行的,这样的关联就不再成立了。ID是一个键,是的,在这一点上,更大的ID会更新,但是,我更愿意使用“年份”字段。由于有一条较新的记录应优先于较新的年份,因此如何从原始表中删除记录1。将“按年份顺序说明”替换为“按ID顺序说明”。。。一般来说