从mysql获取最新记录

时间:2011-09-16 21:39:49

标签: mysql

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

3 个答案:

答案 0 :(得分:4)

您应该在表格中添加column with a TIMESTAMP

此列将自动初始化并更新为行更改时的当前时间,因此将所有更改了最后X分钟的列变为简单查询。

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

如果没有这样的列,除非您找到另一种跟踪更改的方法,否则您无法确切知道某行何时更改。触发器或二进制日志可能有所帮助,但这两种解决方案都不容易,当然也不比添加列快。

答案 1 :(得分:1)

为您的表格添加TIMESTAMP列。仅选择时间戳值介于五分钟之前和现在之间的记录(有关详细信息,请参阅Date and Time Functions)。 (可选)按名称分组,如果只需要每个名称的最新更新,请选择具有最大时间戳值的行。

答案 2 :(得分:0)

如果你添加一个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)

尝试#2:

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