2013-06-12 48 views
1

我有這樣的一個表:MySQL的 - 獲取每個值Y X記錄中某列的

列:

id | parent 

記錄:

1 | 1 
2 | 1 
3 | 1 
4 | 2 
5 | 2 
6 | 2 
7 | 3 
8 | 4 
9 | 5 

而對於所有的父母,我想獲得前2條記錄,所以我應該有:

1 | 1 
2 | 1 
4 | 2 
5 | 2 
7 | 3 
8 | 4 
9 | 5 

我如何在MySQL中實現這一目標?我需要使用子查詢?謝謝。

+0

已經有一個問題和因此,對於這個答案:http://stackoverflow.com/questions/3364224/select-first-n-records-for-每個-不同-ID-在-SQL服務器2008。 ---對不起,這是MSSQL –

+0

@AartStuurman:這是爲MSSQL而不是MySQL。 –

+0

你尋求「獨特」 – Kyslik

回答

1

試試這個

SELECT a.id, a.parent FROM Table1 AS a WHERE 
(SELECT COUNT(*) FROM Table1 AS b 
WHERE b.parent = a.parent AND b.id <= a.id) <= 2 
ORDER BY a.parent ASC, a.id asc 

DEMO HERE

ID  PARENT 
1  1 
2  1 
4  2 
5  2 
7  3 
8  4 
9  5 
1

這裏有幾個不同的解決方案的嘗試。

SELECT id, parent 
FROM (
    SELECT id, (@rownum:=IF([email protected], @rownum+1, 1)) AS rownum, 
     (@parent:=parent) AS parent 
    FROM (SELECT @parent := null) AS _init 
    STRAIGHT_JOIN MyTable 
    ORDER BY parent) AS t 
WHERE t.rownum <= 2; 

備選:

SELECT t1.id, t1.parent 
FROM MyTable AS t1 
LEFT OUTER JOIN MyTable AS t2 
    ON t1.parent = t2.parent AND t1.id >= t2.id 
GROUP BY t1.id 
HAVING COUNT(*) <= 2;