2014-01-10 42 views
1

我想知道如何选择每个遇到结果表的第一个和第二个最低值的用户?mysql选择满足第一个和第二个最低值的所有行?

台试验

NAME VALUE 
John 8 
Marie 8 
Luis 10 
Carlos 10 
Leo  13 
Max  14 

所以结果在这种情况下将

NAME VALUE 
John 8 
Marie 8 
Luis 10 
Carlos 10 

非常感谢!

顺便说一句,我做了我的工作搜索谷歌和一切,没有拿出任何东西,但查询表,然后使用PHP来过滤这个对我来说,不利于性能。

@Aziz我得到的错误:#1235 - 该版本的MySQL还不支持 'LIMIT & IN/ALL/ANY/SOME子查询'

感谢

谢谢大家的负载有用的答案!

万一落入有趣的结果,像我一样,我需要更多的过滤器,不得不添加到查询,这里如下:

SELECT * FROM results_temp WHERE 周报= 'semana6' AND total_pontos IN( SELECT * FROM( SELECT DISTINCT total_pontos FROM results_temp

WHERE semana='semana6' 

    ORDER BY `total_pontos` 
    LIMIT 0,2 

)AS吨 )

问候

+0

@ LeandroCintrao欢迎来到堆栈溢出...现在从下一次确保在将您的问题放在这里之前做一些家庭工作我的意思是在谷歌上搜索...找到相关的答案..试试这个答案,然后如果你没有找到任何东西,然后把你的问题在这里与你所做的任何问题,我的意思是'Code','queriy'等... –

+0

顺便说一句,我做了我的家庭搜索工作谷歌和一切,没有拿出任何东西但查询表格,然后使用PHP为我过滤,对性能不利。 –

+0

然后你应该把这个查询和代码放在这里...... –

回答

2

试试这个:

SELECT * FROM Test WHERE `value` IN (
    SELECT * FROM (
     SELECT DISTINCT `value` 
     FROM Test 
     ORDER BY `value` 
     LIMIT 0,2 
    ) AS t 
) 
+0

我收到错误:#1235 - 此版本的MySQL尚不支持'LIMIT&IN/ALL/ANY/SOME子查询' 谢谢 –

+0

@LeandroCintrao根据您的评论,我更新了上面的答案。请尝试修改后的查询。 –

1
SELECT * 
FROM tablename 
WHERE 
    value <= (SELECT MIN(Value) 
      FROM tablename 
      WHERE value>(SELECT MIN(VALUE) 
         FROM tablename)) 

请参阅小提琴here

2

试试这个:

SELECT t.* 
FROM Test t 
INNER JOIN (SELECT DISTINCT t.value FROM Test t ORDER BY t.value LIMIT 2 
      ) A ON t.value = A.value; 

入住这SQL FIDDLE DEMO

输出

| NAME | VALUE | 
|--------|-------| 
| John |  8 | 
| Marie |  8 | 
| Luis | 10 | 
| Carlos | 10 | 
1

一个特定查询不相关的版本几乎总是快...

SELECT x.* 
    FROM tablename x 
    JOIN (SELECT DISTINCT value FROM tablename ORDER BY value LIMIT 2) y 
    ON y.value = x.value; 
相关问题