从数据库获取最新记录多个查询

时间:2011-09-17 18:02:07

标签: 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 MINUTE
   AND b.name = a.name)

但是生成结果需要很长时间> 10秒。

2 个答案:

答案 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

此查询的时间戳列上至少需要一个索引。