我有一个表,存储每个产品标识符
的引用
,但是有一些重复的记录 - 即。一件产品可能已提交多次,因此有多个引用。每条记录都带有updated
列的时间戳。
我需要一个查询,该查询只会为每个产品标识符
提供一个(非空)引用,但最重要的是只会选择每个产品的最新记录。
如果原始表是这样的:
id updated product-identifier reference
------------------------------------------------------------
1 2014-11-10 07:47:02 9876543210123 98043hjdww98324322
2 2014-11-10 07:53:24 9897434243242 89f7e9wew329f080re
3 2014-11-12 10:51:10 9876543210123 48308402jfjewkfwek
4 2014-11-12 12:53:24 9876543210123 89739432bkjfekwjfk
5 2014-11-12 12:55:16 9876543210321 21321hhfioefhewfoe
6 2014-11-13 01:01:10 9897434243242
7 2014-11-13 01:05:24 9897434243242 1232423jhdksffewfe
查询应仅返回以下记录:
id updated product-identifier reference
------------------------------------------------------------
4 2014-11-12 12:53:24 9876543210123 89739432bkjfekwjfk
5 2014-11-12 12:55:16 9876543210321 21321hhfioefhewfoe
7 2014-11-13 01:05:24 9897434243242 1232423jhdksffewfe
我已经尝试过
SELECT * FROM tablename WHERE reference !='' GROUP BY product-identifier ORDER BY updated DESC
这只会为每种产品提供一条记录,但不是最新的 - 它是在排序之前进行分组。
非常感谢您的帮助!
最佳答案
我通常通过使用一个子查询来选择每个组的最高时间戳(在您的情况下是product_identfier),然后使用它来选择我想要的行。像这样
select *
from tablename a
where a.updated = (select max(updated)
from tablename b
where a.product_identifier = b.product_identifier)
关于mysql - SQL group by,如何定义每个组的记录,例如。最新的,已使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26973313/