【发布时间】:2021-01-23 17:14:18
【问题描述】:
对不起,如果我的措辞令人困惑,自学 PL/SQL。我正在尝试根据一列查询具有最高值的行中的所有列。
示例:我有一个三行三列的表格 表:PTest
Ptest_no | Test_id | Test_inst
------------------------------
ABC11 | 1 | 1
ABC11 | 2 | 1
ABC11 | 2 | 2
我只需要获取包含所有列的顶行和底行(最终表格将有接近 10 列以上)
结果:
ABC11 | 1 | 1
ABC11 | 2 | 2
我试过了:
--但它只打印第三行。
select * from ptest
where test_inst = (select max(test_inst) from ptest);
--尝试自连接,认为子查询可以帮助指定条件。 --但只打印第三行
select a.Ptest_no, a.test_id, a.test_inst
from PTest a
join (select max(test_inst) as max_insty
from PTest b
where PTest_no = 'ABC11') on max_insty = a.test_inst
where PTest_no = 'ABC11';
--导致无效的关系运算符。 --我不确定这意味着什么。
select test_inst, ptest_no, test_id
from ptest
group by test_inst, ptest_no, test_id having max(test_inst);
目前正在尝试: - 再次尝试使用自我加入但使用 CASE,在使用 CASE 时遇到困难并且不确定如何正确结束它,如果它是最佳路线。注释掉案例并运行,仅打印第三行 - 在所有行上添加了第 4 行名称 ptest_snu,其值为“69”。不确定我为什么这样做。
select a.Ptest_no, a.test_id, a.test_inst, a.ptest_snu
from PTest a
--case
--when a.test_id = b.test_id then select max(test_inst)
--else (select * from Ptest a) end
join (select max(test_inst) as max_insty
from PTest b
where PTest_no = 'ABC11') on max_insty = a.test_inst
where a.ptest_snu = '69';
【问题讨论】:
-
首先弄清楚您实际使用的是哪个 RDBMS,并相应地标记您的问题
标签: mysql sql max greatest-n-per-group