我有一个带车辆记录的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 MINUTE
AND b.name = a.name)
但是生成结果需要很长时间> 10秒。
答案 0 :(得分:3)
您不需要自我加入。
select max(ts), name from Table1
where ts > NOW() - INTERVAL 5 MINUTE
group by name
答案 1 :(得分:1)
获取最新更新的所有行,而不仅仅是名称和时间戳:
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
此查询的时间戳列上至少需要一个索引。