2009-06-23 9 views
1

Quelle est la meilleure façon d'exprimer cela dans une requête SQL?MySQL WHERE timestamp> = SUBDATE (MAX (horodatage), INTERVALLE 5 JOURS)

"Sélectionnez quelques éléments aléatoires qui se trouvent dans les x jours de l'élément le plus récent dans la table."

J'ai essayé les éléments suivants:

SELECT * 
FROM table 
HAVING `timestamp` >= SUBDATE(MAX(`timestamp`), INTERVAL 5 DAY) 
ORDER BY RAND() 
LIMIT 10 

Mais cela ne me donne un seul résultat, pas 10. WHERE au lieu de HAVING ne coupe pas à cause de l'utilisation de MAX().

Répondre

3

Vous voulez probablement votre déclaration MAX dans une sous-requête:

SELECT * 
FROM table 
WHERE `timestamp` >= SUBDATE((SELECT MAX(`timestamp`) FROM table), INTERVAL 5 DAY) 
ORDER BY RAND() 
LIMIT 10 
+0

D'oh, si évident. J'espérais quelque chose sans avoir besoin d'une sous-requête pour mon DAO, mais avec un peu de supercherie cela fonctionne bien. Merci. – deceze

0
SELECT * 
FROM table 
where `timestamp` >= (select SUBDATE(MAX(`timestamp`), INTERVAL 5 DAY) from table) 
ORDER BY RAND() 
LIMIT 10;