我正在尝试优化查询,但遇到了一些困难。
请考虑以下表格结构。如果您希望自己构建表,我还提供了一些SQL:
| id | test_run_id | test_case_id | test_step_id | test_result |
|----|-------------|--------------|---------------|-------------|
| 1 | 1 | 3 | 1 | 1 |
| 2 | 1 | 3 | 2 | 1 |
| 3 | 1 | 3 | 3 | 0 |
| 4 | 2 | 3 | 1 | 1 |
| 5 | 2 | 3 | 2 | 1 |
| 6 | 2 | 3 | 3 | 1 |
CREATE TABLE test_results(
id INT(10) AUTO_INCREMENT,
test_run_id INT(10) DEFAULT 0,
test_case_id INT(10) DEFAULT 0,
test_step_id INT(10) DEFAULT 0,
test_result CHAR(1) DEFAULT 0,
PRIMARY KEY(id)
);
INSERT INTO test_results(
`test_run_id`,
`test_case_id`,
`test_step_id`,
`test_result`
) VALUES (
1,
3,
1,
1
), (
1,
3,
2,
1
), (
1,
3,
3,
0
), (
2,
3,
1,
1
), (
2,
3,
2,
1
), (
2,
3,
3,
1
);
现在,我想获取最新的结果集作为查询的一部分。我知道我可以这样做:
SELECT
MIN( test_result ) as 'last_run_lowest'
FROM test_run_results
WHERE test_case_id=tc.id
AND test_run_id=(
SELECT
MAX( test_run_id )
FROM test_run_results
WHERE test_case_id=tc.id
)
那将返回我一行:
| last_run_lowest |
|-----------------|
| 1 |
我要这样做,因为值1
表示最后一次测试通过了。但是,由于我的test_run_results
表中的结果量很大,以这种方式进行处理会花费很多时间。
我想找出的是,是否有一种更有效的方法来返回相同的数据,从而使查询不会花费那么长时间。
预先感谢
答案 0 :(得分:2)
如果只需要一个值,为什么不这样做呢?
SQL Server版本:
Select Top 1 test_result
from test_results
order by Test_run_ID desc, test_result asc
每个注释,MySQL版本:
Select test_result
from test_results
order by Test_run_ID desc, test_result asc
limit 1;