我有以下查询
SELECT ID, TestReason
FROM Test as t
INNER JOIN TestResult as tr ON t.ID = tr.TestID
测试可以有多个测试结果。
TestResults
为A, B, C
或D, F
。
我需要说明每次测试,给我最大的测试结果,但是测试结果上的ID与成绩无关,所以我必须使用字符串。
以下是表格:
测试
ID TestReason
int int
测试原因
ID Grade
int varchar(2)
所以基本上最高等级胜过所有,所以如果测试(TestID = 1
)包含A,C,C,D,D
的测试结果,我需要返回1条记录:
1 A
我该怎么做?
答案 0 :(得分:3)
也许我错过了一些东西,但你试过这个 - 因为你使用的是字母等级,那么你将使用MIN()
:
select MIN(r.grade), t.test_id
from test t
inner join testresult r
on t.test_id = r.id
group by t.test_id
或者您可以使用row_number()
:
select grade, test_id
from
(
select r.grade, t.test_id,
row_number() over(partition by t.id
order by grade) rn
from test t
inner join testresult r
on t.test_id = r.id
) x
where rn = 1
答案 1 :(得分:1)
SELECT DISTINCT ID
, TestReason
FROM Test T
WHERE TestResult = (SELECT MIN(TestResult) FROM Test WHERE ID = T.ID)