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