2011-09-17 1 views
1

J'ai une base de données mysql avec des enregistrements de véhicules. J'ai besoin d'une requête rapide qui retourne les enregistrements les plus récents de ces enregistrements qui ont été mis à jour au cours des 4 dernières minutes. Par exemple, le véhicule "A" peut être mis à jour plusieurs fois par minute de sorte qu'il apparaîtra de nombreuses fois au cours des 4 dernières minutes. Même avec le véhicule B C etc. Je n'ai besoin que des entrées les plus récentes pour chaque véhicule dans une fenêtre de 4 min. J'ai essayé comme ceciObtenir le nouvel enregistrement à partir d'une base de données Plusieurs requêtes

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) 

mais cela prend trop de temps pour produire des résultats> 10 secondes.

+0

Je suis confus - si un enregistrement est mis à jour, pourquoi la table contient plusieurs enregistrements, plutôt que le seul enregistrement? En outre, il serait utile de voir la définition CREATE TABLE de votre table, et quelques exemples de données, pour aider à répondre à la question. – Kenny

+0

En fait, la table n'est pas mise à jour mais de nouveaux enregistrements y sont insérés comme s'il s'agissait d'un journal de position de véhicule –

Répondre

0

Est-ce que cela fonctionne?

select distinct a.id from yourtable AS a 
where a.ts > NOW() - INTERVAL 5 MINUTE; 

Il donne tous les véhicules qui ont été mis à jour en 4/5 dernières minutes.

Merci, Rakesh

Questions connexes