2014-07-20 27 views
3

我想從表中選擇5個隨機行,但只能從最近的20行中選擇。我知道2個報表中單獨會是這樣的:如何從20個最近的行中選擇5個隨機行?

SELECT * FROM table ORDER BY RAND() LIMIT 5 
SELECT * FROM table ORDER BY date DESC LIMIT 20 

我將如何結合這2所陳述所以它會選擇最近的20排5個隨機行?謝謝。

回答

3

使用嵌套查詢

SELECT foo.* FROM (SELECT * FROM table ORDER BY date DESC LIMIT 20) as foo 
     ORDER BY RAND() LIMIT 5 
+0

這一個是唯一的答案,順便說一句。沒有使用「as foo」和「foo」。它不起作用。你知道這是爲什麼嗎? – user1413341

+3

@ user1413341 MySQL要求所有派生表和子查詢都有自己的別名。這正是我試圖打出足夠快的速度與這兩者競爭的結果。 = P –

+0

我明白了。謝謝! – user1413341

1

只需將其嵌套:

SELECT * FROM (
    SELECT * FROM table ORDER BY date DESC LIMIT 20 
) ORDER BY RAND() LIMIT 5 
1

查找子查詢!

SELECT d.* FROM (SELECT * FROM table ORDER BY date DESC LIMIT 20) as d ORDER BY RAND() LIMIT 5;