我想从表格中得到最大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
任何人都可以帮助我?
答案 0 :(得分:2)
如果我理解您想要的逻辑(testid
的最大studyid = 6
,那么请使用order by
和limit
:
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。