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

时间:2016-01-30 08:22:25

标签: mysql sql

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

让我们看下表:

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记录的查询,但我只想返回最新记录(按年份),如果有重复项目(没有可能出现平局)。< / p>

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

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;

如何进一步采取步骤,每件物品每年只能获得一行?

2 个答案:

答案 0 :(得分:0)

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;

答案 1 :(得分:0)

我最终得到了以下内容:

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