2012-12-19 25 views
1

考慮下面的表...這個查詢是如何在mysql中完成的?

ID USER NUM 
1  1 69 
2  2 75 
3  3 7 
4  1 31 
5  2 18 
6  3 70 
7  1 12 
8  2 23 
9  3 42 

...這查詢將返回與最低 NUM爲每個用戶行?

結果應該像...

ID USER NUM 
7  1 12 
5  2 18 
3  3 7 

不能滿腦子都在這一個!假設它有一個GROUP BY,但我嘗試失敗的一切...任何指針?

+1

你還需要有一個記者'id'?如果有幾行具有相同的'num',會怎麼樣? – zerkms

+0

是的,它需要:P – neokio

+0

是什麼?你正在試圖從結果中查詢? –

回答

3
SELECT t.* 
FROM tablename t 
INNER JOIN (SELECT user, MIN(num) num 
FROM tablename 
GROUP BY user) x ON t.user = x.user AND t.num = x.num 

SELECT t1.* 
FROM tablename t1 
LEFT JOIN tablename t2 ON t1.user = t2.user AND t1.num > t2.num 
WHERE t2.id IS NULL 
+0

哇。好吧,現在試試:) – neokio

+0

是的,'INNER JOIN'就像一個魅力。我的大腦是椒鹽脆餅。非常感謝! – neokio

+0

'LEFT JOIN'也有效,雖然它讓我難以置信! 'INNER JOIN'約快15倍。 – neokio

0
SELECT ID , MIN(NUM) as MIN_NUM , USER FROM usertable GROUP BY USER 

看一看演示http://sqlfiddle.com/#!2/ce2fd/1

+0

你將如何獲得**通訊員**'ID'? – zerkms

+0

見將取回所有列 –

+0

不,這不會返回編輯** **通訊員ID,它會返回一些隨機'id' – zerkms

0

這裏是另一種方法。 WITH THE正確REREFERENCE

查詢而更新

select b.id, a.user, a.minnum from 
mytable as b 
join 
(select user, min(num) as minnum 
from mytable 
group by user 
) as a 
on b.user = a.user 
where b.num = a.minnum 
order by a.minnum asc 
limit 3 
; 

結果:

ID USER MINNUM 
3 3 7 
7 1 12 
5 2 18 
+0

你說的「其他」是什麼意思? – zerkms

+1

對不起,我在這裏得到了錯誤的參考。你很快:) +1這個@zerkms我說另一個解決方案,因爲我使用'極限3',再加'join'就足夠了,因爲'left'不一定是這裏的情況:) – bonCodigo

相關問題