如何获取具有一列最大值的行

时间:2014-10-03 12:16:46

标签: mysql sql

我想从表格中得到最大testid(其中studyid等于6)的行

 seq | studyid  | buildnumber |  testid |
 1   |    6     |   1904      |    1    |
 2   |    6     |   1904      |    1    | 
 3   |    6     |   1904      |    1    | 
 4   |    6     |   1029      |    3    | 
 5   |    6     |   1029      |    3    | 
 6   |    6     |   1104      |    5    | 
 7   |    6     |   1104      |    5    | 
 8   |    6     |   3049      |    4    | 
 9   |    6     |   3049      |    4    | 
10   |    7     |   4029      |    11   | 
11   |    8     |   5049      |    21   | 
12   |    9     |   6049      |    14   | 
13   |   10     |   7049      |    54   | 
14   |   11     |   8049      |    13   | 

预期结果将是

6   |    6     |   1104    |    5    | 

我正在尝试的查询是

select max(buildnumber) buildnumber, max(testid) testid, studyid 
from testdata 
where studyid = 6

任何人都可以帮助我?

2 个答案:

答案 0 :(得分:2)

如果我理解您想要的逻辑(testid的最大studyid = 6,那么请使用order bylimit

select t.*
from testdata t
where studyid = 6
order by testid desc
limit 1;

请注意,这可能会返回第6行或第7行。问题的措辞是“使用max testid获取行...”,暗示只有一行。但是,样本数据有两行,没有解释如何选择一行。

答案 1 :(得分:1)

使用order by先获取目标行,然后使用llomit:

select *
from testdata
where studyid = 6
order by testid desc, seq
limit 1

虽然没有说明,但是您的样本数据表明应该使用最低的seq打破yx msx testid的关系,因此在order by子句中有seq。