Получение новейшей записи из базы данных. Несколько запросов. - PullRequest
2 голосов
/ 17 сентября 2011

У меня есть база данных mysql с записями транспортных средств. Мне нужен быстрый запрос, который вернет самые новые записи тех записей, которые были обновлены в течение последних 4 минут. Например, транспортное средство «А» может обновляться несколько раз в минуту, поэтому оно будет появляться много раз в течение последних 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 ]

3 голосов
/ 17 сентября 2011

Самостоятельное присоединение не требуется.

select max(ts), name from Table1
where ts >  NOW() - INTERVAL 5 MINUTE
group by name
1 голос
/ 18 сентября 2011

Чтобы получить все строки для последних обновлений, а не только имя и метку времени:

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

Вам понадобится хотя бы индекс для столбца метки времени для этого запроса.

...