2011-09-30 2 views
12

J'essaie de faire une requête qui ramène les résultats en fonction d'un horodatage, disons un intervalle de 30 minutes.Horodatage mySQL SELECT (now() - 3000);

Alors ce que j'ai compris est que je peux

SELECT * FROM x WHERE ts BETWEEN timestamp(now()-3000) AND timestamp(now()) 

Donc, ce interrogera tout de x avec horodatages ts colonne au cours des 30 dernières minutes. Cependant, cela ne fonctionne qu'après after() est passé le jauge aaaa-mm-jj HH: 30: 00 parce que n'importe quand avant qu'il se traduise par NULL ... c'est assez lourd et je ne comprends pas pourquoi ne sera pas seulement soustraire les minutes friggin de l'heure!

S'il vous plaît aidez-moi! Je n'ai pas trouvé d'autre méthode pour faire une requête dans les 30 dernières minutes, c'est ce que j'essaie d'accomplir.

Meilleures salutations,

John

Répondre

34
SELECT * FROM x WHERE ts BETWEEN timestamp(DATE_SUB(NOW(), INTERVAL 30 MINUTE)) AND timestamp(NOW()) 
1

Tout d'abord vous devez réaliser que l'horodatage() renvoie un horodatage unix en quelques secondes. 3000 secondes ne sont pas 30 minutes, cela devrait être 1800 secondes. essayez cela

+0

En fait, quand je soustrait 1800 il a seulement soustrait 18 secondes donc ... – Theveloper

+0

@Theveloper ah il devrait être unix_timestamp, n'a pas vu cette partie. Un horodatage est dans un format différent avec lequel vous ne pouvez pas faire des maths aussi cohérentes. – mugetsu

11
SELECT * FROM x WHERE ts BETWEEN NOW() - INTERVAL 30 MINUTE AND NOW(); 
2
SELECT * FROM x 
WHERE ts BETWEEN TIMESTAMPADD(MINUTE, -30, NOW()) AND NOW(); 
0
SELECT * FROM (`yourdb`) WHERE `timestamp` BETWEEN NOW() - INTERVAL 30 MINUTE AND NOW(); 
1

Pour moi, ce qui a fonctionné suit requête

select * from x where (now() - ts) < 180000 

180000 est de 30 minutes, parce que 6000 ms est de 1 minute