2009-06-23 1 views
1

Was ist der beste Weg, dies in einer SQL-Abfrage auszudrücken?MySQL WHERE Zeitstempel> = SUBDATE (MAX (Zeitstempel), INTERVALL 5 DAY)

"Wählen Sie ein paar zufällige Elemente, die innerhalb von x Tagen des neuesten Elements in der Tabelle fallen."

Ich habe versucht, die folgenden:

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

Aber das gibt mir nur ein einziges Ergebnis, nicht 10. WHERE statt HAVING es nicht wegen der Verwendung von MAX() schneidet.

Antwort

3

Sie wollen wahrscheinlich Ihre MAX-Anweisung in einer Unterabfrage:

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

D'oh, so offensichtlich. Ich habe auf etwas gehofft, ohne eine Unterabfrage für meine DAO zu benötigen, aber mit ein bisschen Trickserei funktioniert es gut. Dank. – deceze

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