Mysql 通过多次查询从数据库获取最新记录
我有一个包含车辆记录的mysql数据库。我需要一个快速查询,它将返回在过去4分钟内更新的那些记录的最新记录。例如,车辆“A”可能会在一分钟内更新数次,因此在过去4分钟内会出现多次。与车辆B C等相同。我只需要在4分钟窗口内为每辆车辆输入最新的条目。我试过这样做Mysql 通过多次查询从数据库获取最新记录,mysql,greatest-n-per-group,Mysql,Greatest N Per Group,我有一个包含车辆记录的mysql数据库。我需要一个快速查询,它将返回在过去4分钟内更新的那些记录的最新记录。例如,车辆“A”可能会在一分钟内更新数次,因此在过去4分钟内会出现多次。与车辆B C等相同。我只需要在4分钟窗口内为每辆车辆输入最新的条目。我试过这样做 SELECT * FROM yourtable AS a WHERE a.ts = (SELECT MAX(ts) FROM yourtable AS b WHERE b.ts > NOW() - INTERVAL 5 MIN
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)
但是,生成大于10秒的结果所需的时间太长。您不需要自联接
select max(ts), name from Table1
where ts > NOW() - INTERVAL 5 MINUTE
group by name
要获取最新更新的所有行,而不仅仅是名称和时间戳,请执行以下操作:
SELECT t.*
FROM
TableX AS t
JOIN
( SELECT name
, MAX(ts) AS maxts
FROM TableX
WHERE ts > NOW() - INTERVAL 4 MINUTE
GROUP BY name
) AS grp
ON grp.name = t.name
AND grp.maxts = t.ts
此查询至少需要时间戳列上的索引。不起作用。上述代码没有返回最新更新的值扫描您发布的数据示例?例如,突出显示的行应在20分钟的窗口中返回此示例请以文本形式将数据发布到pastebin,以便我可以将其导入数据库并进行测试。检查、查询和结果。看起来正常,并符合data.jpg文件中的结果。确保ts列定义为“时间戳”。