2014-07-11 69 views
1

我知道這種類型的問題已被多次詢問,但我無法找到我的問題的好答案。 我試圖從表中獲取每個人的前3個查看記錄。從表格中選擇每個用戶的前3張圖片

MYTABLE

id user_id  views 
1  5   6 
2  5   3 
3  6   5 
4  7   4 
5  9   14 
6  5   3 
7  5   8 
8  6   7 
9  7   15 
10  9   13 
11  9   13 
12  9   18 
13  6   8 
14  8   0 

結果

id  user_id views 
12  9   18 
9  7   15 
5  9   14 
10  9   13 
13  6   8 
7  5   8 
8  6   7 
1  5   6 
3  6   5 
4  7   4 
2  5   3 
14  8   0 

我跟着這個鏈接http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/

我的查詢

select * 
from mytable 
where (
    select count(*) from mytable as f 
    where f.user_id = mytable.user_id and f.views >= mytable.views 
) < 4 order by user_id desc; 

但這個查詢沒有獲取這些記錄意見相同。 請指點我正確的方向。

+1

我不明白你的問題。但是,你可以簡單地通過這個查詢得到結果(你在你的文章中提到)......'SELECT * FROM mytable ORDER BY views DESC' –

+1

@TunZarniKyaw差不多。 [10,9,13]和[11,9,13]都不在結果集中。 –

+0

@TunZarniKyaw,我正試圖從表格中提取每個用戶只有3個最常見的記錄。以上僅僅是示例數據,並且有多個用戶輸入。我只需要每個用戶3個查看次數最多的記錄。 – Santosh

回答

1

試試這個:

SELECT id, user_id, views 
FROM (SELECT IF(@lastUserId = @lastUserId:=t.user_id, @ID:[email protected]+1, @ID:=1) AS userNo, 
       t.id, t.user_id, t.views 
     FROM mytable t, (SELECT @ID:=0, @lastUserId:=0) A 
     ORDER BY t.user_id, t.views DESC 
    ) AS A 
WHERE userNo <= 3 
ORDER BY views DESC 

檢查SQL FIDDLE DEMO

輸出

| ID | USER_ID | VIEWS | 
|----|---------|-------| 
| 12 |  9 | 18 | 
| 9 |  7 | 15 | 
| 5 |  9 | 14 | 
| 10 |  9 | 13 | 
| 7 |  5 |  8 | 
| 13 |  6 |  8 | 
| 8 |  6 |  7 | 
| 1 |  5 |  6 | 
| 3 |  6 |  5 | 
| 4 |  7 |  4 | 
| 2 |  5 |  3 | 
| 14 |  8 |  0 | 
+0

此查詢僅提取一個用戶的記錄。我需要3個觀看次數最多的用戶。謝謝你的幫助。 – Santosh

+0

像魅力一樣工作。非常感謝。 – Santosh

相關問題