我有一个查询,我想知道我得到的结果是否是我期待的结果。
表格结构如下:
Table : results
ID TestCase Set Analyzed Verdict StartTime Platform
1 1010101 ros2 false fail 18/04/2010 20:23:44 P1
2 1010101 ros3 false fail 19/04/2010 22:22:33 P1
3 1232323 ros2 true pass 19/04/2010 22:22:33 P1
4 1232323 ros3 false fail 29/04/2010 22:22:33 P2
Table : testcases
ID TestCase type
1 1010101 NOSNOS
2 1232323 N212NS
有没有办法在每个平台上只显示最新的失败?
在上述情况
结果应该是:
ID TestCase Set Analyzed Verdict StartTime Platform type
2 1010101 ros3 false fail 19/04/2010 22:22:33 P1 NOSNOS
4 1232323 ros3 false fail 29/04/2010 22:22:33 P2 N212NS
答案 0 :(得分:5)
这应该会为您提供每个平台的最新失败。它依赖于id
按时间顺序排列。
将*
替换为您实际需要的列。
Select *
From results r
Join testcases t On ( t.testCase = r.testCase )
Where r.id In (
Select Max(id)
From results
Where verdict = 'fail'
Group By platform
)
或者,您可以使用Left Join
仅获取startTime
每platform
行最多的行:
Select *
From results r
Join testcases t On ( t.testCase = r.testCase )
Left Join results r2 On ( r2.platform = r.platform
And r2.verdict = r.verdict
And r2.startTime > r.startTime )
Where r.verdict = 'fail'
And r2.id Is Null
答案 1 :(得分:0)
是的,在查询中使用group by Testcase
和order by ID desc limit 1
答案 2 :(得分:0)
这应该可以解决问题,我不确定它是否会有效:
select r.*, t.type
from
(
Select TestCase, max(StartTime) lastDate
From results
group by TestCase
)big
inner join results r on r.StartTime = big.lastDate and r.TestCase = big.TestCase
inner join testcases t on t.TestCase = r.TestCase
我建议你将结果表中TestCase
列的testcases表中的ID存储起来,而不是'TestCase'。根据此列中的数据类型,您可能会获得更好的性能。