从mysql获取最新记录

从mysql获取最新记录,mysql,Mysql,我有一个mysql数据库,有几个记录。每个记录都有一个名称。它不是唯一的,这意味着在更新值时,相同的名称会多次出现在表中。 如何创建只返回过去5分钟内更新的最新名称的查询(每个名称每分钟更新多次。我只需要5分钟窗口内的最新条目)您应该向表中添加一个 当行发生更改时,此列将自动初始化并更新到当前时间,因此获取最近X分钟内更改的所有列将成为一个简单的查询 SELECT * FROM yourtable WHERE yourtimestamp > NOW() - INTERVAL 5 MINU

我有一个mysql数据库,有几个记录。每个记录都有一个名称。它不是唯一的,这意味着在更新值时,相同的名称会多次出现在表中。 如何创建只返回过去5分钟内更新的最新名称的查询(每个名称每分钟更新多次。我只需要5分钟窗口内的最新条目)

您应该向表中添加一个

当行发生更改时,此列将自动初始化并更新到当前时间,因此获取最近X分钟内更改的所有列将成为一个简单的查询

SELECT *
FROM yourtable
WHERE yourtimestamp  > NOW() - INTERVAL 5 MINUTE

如果没有这样的列,您就无法真正知道行何时被更改,除非您找到另一种方法来跟踪更改。触发器或二进制日志可能会有所帮助,但这两种解决方案都不比添加列更简单,当然也不比添加列更快。

为您的表设置一个
时间戳
列。仅选择时间戳值介于5分钟前和现在之间的记录(有关详细信息,请参阅)。如果您只希望每个名称的最新更新,可以选择按名称分组并选择具有最大时间戳值的行。

如果您添加
时间戳
列,您应该能够通过执行以下查询来获取过去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)
尝试#2:


我认为这也许只能部分回答这个问题。OP可能只需要上次更新的记录上述代码将显示5分钟内更新的每条记录。我只想在5分钟内更新最新的每一个什么?每个用户?按用户分组并获取最大值(您的时间戳)。或者将触发器插入到另一个具有正确唯一键的表中,这很好。你能编辑你的问题并告诉我们吗?你有桌子的结构吗?您能否将
SHOW CREATE TABLE yourtable
输出发布给我们?帮帮我们,帮帮你,成功了!但是mysql需要6秒的时间来处理。那里几乎没有记录。。。有没有更快的方法呢?我不理解这个部分,b.name=a.name我错过了MySQL的部分。。。根据我的经验,当涉及子查询时,MySQL并不是最好的执行者。我添加了一个可能的第二个方法,但我没有什么东西可以测试它,因此它不能保证工作。
b.name=a.name
导致子查询成为相关子查询。对于外部查询(在本例中为a)中的每个记录,对内部查询(b)执行查询。您可以在MySQL中阅读它们:@redfrogsbinary:6秒对于少数记录来说是很慢的(有多少是“少数”?)。你可以在这里或在一个新问题中发布你的索引,以优化速度。
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