我有一个MySQL数据库,其中包含多个记录。每个记录都有一个名称。这个名称不是唯一的,也就是说,在表中同样的名称会出现多次,因为值被更新了。 如何创建一个查询,只返回在过去5分钟内更新的最新名称(每个名称每分钟更新多次。我只想要5分钟窗口内的最新条目)。
我有一个MySQL数据库,其中包含多个记录。每个记录都有一个名称。这个名称不是唯一的,也就是说,在表中同样的名称会出现多次,因为值被更新了。 如何创建一个查询,只返回在过去5分钟内更新的最新名称(每个名称每分钟更新多次。我只想要5分钟窗口内的最新条目)。
SELECT *
FROM yourtable
WHERE yourtimestamp > NOW() - INTERVAL 5 MINUTE
如果没有这样的列,你实际上无法知道行何时发生了更改,除非你找到另一种跟踪更改的方法。触发器或二进制日志可以帮助解决问题,但这两种解决方案都不如添加一列简单和快速。
TIMESTAMP
列。仅选择时间戳值介于五分钟前和现在之间的记录(有关详细信息,请参见日期和时间函数)。如果您只想获取每个名称的最新更新,则可以选择按名称分组并选择具有最大时间戳值的行。TIMESTAMP
列,您应该能够通过执行以下查询来获取过去5分钟内添加的名称的最新值:SELECT *
FROM yourtable AS a
WHERE a.ts =
(SELECT MAX(ts)
FROM yourtable AS b
WHERE b.ts > NOW() - INTERVAL 5 MINUTE
AND b.name = a.name)
SELECT *
FROM yourtable AS a
INNER JOIN (SELECT name, MAX(ts) AS ts
FROM yourtable
GROUP BY name
HAVING MAX(ts) > NOW() - INTERVAL 5 MINUTE) AS b
ON a.name = b.name
AND a.ts = b.ts
b.name = a.name
会导致子查询成为相关子查询。在外部查询中的每个记录(在本例中为a),您都要对内部查询(b)执行查询。您可以在MySQL文档中了解有关它们的信息:http://dev.mysql.com/doc/refman/5.5/en/correlated-subqueries.html - bhamby
SHOW CREATE TABLE yourtable
的输出发给我们吗?帮助我们帮助你。 - Konerak