我在其他地方找到了这个问题的几个答案,但是无法真正将这些答案应用于我的特定情况。
让我们看下表:
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;
如何进一步采取步骤,每件物品每年只能获得一行?
答案 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;