查询优化:选择结果集的最小值,其中一列是另一组的最大值

哈维·弗莱彻

我正在尝试优化查询,但遇到了一些困难。

请考虑以下表格结构。如果您希望自己构建表,我还提供了一些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表中的结果数量很大,以这种方式进行处理会占用相当多的时间

我想找出的是,是否有一种更有效的方法来返回相同的数据,从而使查询不会花费那么长时间。

提前致谢

肺动脉高压

如果您只需要单个值,为什么不这样做呢?

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;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

获取一列的值,其中一列为最大值,另一列为最小值

选择一列的最小值,另一列的最大值以及与最大值相关的字段

从一列定义的组中选择最小值/最大值作为另一列的子组-SQL,HPVertica

用另一列选择最大值/最小值

z3py中一组变量的最大值和最小值

熊猫,从一列中选择最大值,从另一列中选择最小值

从另一列的最大值中检索一列的最小值

选择 col 值,其中另一个 col 是最大值或最小值

SQL分组依据:选择另一列具有其最小值/最大值的值

在单个查询中从SQL的同一列中选择最大值和最小值

在与另一列对应的列中找到最大值和最小值

以另一列的最小值/最大值作为条件作为 SUM 进行测量

根据另一列中的字符保留最小值或最大值

从同一组中选择平均值,在另一列中选择最大值,另一列

如何获得表A中列的最小值/最大值以及B中的值,其中B的行由A中的另一列确定?

如何找出一列相对于另一列的最大值和最小值的总和

pandas groupby,您将获得一列的最大值和另一列的最小值

根据数组的另一列在一列中聚合最小值最大值-Python

CQL(cassandra)-仅选择其中一列中具有最大值的行

Excel:使用什么公式返回一组查找值的最小值或最大值?

如何将txt文件中一列的最大值和最小值打印到变量中

获取一组字符串中的最大值和最小值

如何在 SQL 中获取一组行的最小值和最大值?

如何从表中找到最大值和最小值以及另一列值?

如何用一列的最大值与另一列的最小值之间的差异将一列中的df按Python分组?

更好的查询以选择带有计数结果的聚合的最大值,并保留另一列MySQL?

从一列中选择最小值(日期),最大值(日期)并按天分组-SQL

Pandas - 一列的最小值和最大值,直到每一行

MySQL-在选择另一列的最小值之后选择一列的最小值