mysql - SQL group by,如何定义每个组的记录,例如。最新的,已使用

标签 mysql sql group-by

我有一个表,存储每个产品标识符引用,但是有一些重复的记录 - 即。一件产品可能已提交多次,因此有多个引用。每条记录都带有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/

相关文章:

sql - 根据最高值更改列

sql - 通过另一个表中的值限制表中的行数

mysql - 查询MySQL表中某组数据的最新数据

mysql - 根据总和排序

mysql - 如何支持用户为我的业务逻辑处理定义规则?

mysql - 由于数据库凭据无效,kamailio 无法启动

MySQL 查询返回奇怪的结果

php - 使用 CodeIgniter 分组

内部连接中的类似 Mysql 的查询

MySQL字段结构