Mysql 通过多次查询从数据库获取最新记录

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

我有一个包含车辆记录的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秒的结果所需的时间太长。

您不需要自联接

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列定义为“时间戳”。