我有下表:
NAMES:
Fname | stime | etime | Ver | Rslt
x 4 5 1.01 Pass
x 8 10 1.01 Fail
x 6 7 1.02 Pass
y 4 8 1.01 Fail
y 9 10 1.01 Fail
y 11 12 1.01 Pass
y 10 14 1.02 Fail
m 1 2 1.01 Fail
m 4 6 1.01 Fail
我想输出的结果是:
x 8 10 1.01 Fail
x 6 7 1.02 Pass
y 11 12 1.01 Pass
y 10 14 1.02 Fail
m 4 6 1.01 Fail
结果意味着什么: Fnames是运行测试的示例。每个测试都在不同的软件平台上运行(版本号)一些测试在同一平台上运行两次:它第一次通过而第二次失败,反之亦然。我所需的输出基本上是每个版本的每个案例的最新结果。所以基本上上面的结果都是Fname和Ver(sion)的组合所独有的,并且它们是由唯一组的最新etime选择的。
我到目前为止的查询是:
select Fname,stime,max(etime),ver,Rslt from NAMES group by Fname,Rslt;
然而,这并没有给我所需的输出。 我得到的输出是(错误的):
x 4 10 1.01 Fail
x 6 7 1.02 Pass
y 4 12 1.01 Pass
y 10 14 1.02 Fail
m 1 6 1.01 Fail
基本上它需要最长时间,但它并没有真正打印出正确的数据,它打印了最大时间,但它打印了整个唯一数据组的初始时间,而不是特定测试的初始时间(记录)。
我已经尝试了很长时间来解决这个问题,但我似乎没有去过那里。我觉得这里有一个加入,但我也尝试过,没有运气。
感谢任何帮助, 谢谢。
答案 0 :(得分:2)
使用子查询通过FName和Ver获取最大ETime,然后将主表连接到它:
SELECT
NAMES.FName,
NAMES.STime,
NAMES.ETime,
NAMES.Ver,
NAMES.Rslt
FROM NAMES
INNER JOIN (
SELECT FName, Ver, MAX(ETime) AS MaxETime
FROM NAMES
GROUP BY FName, Ver
) T ON NAMES.FName = T.FName AND NAMES.Ver = T.Ver AND NAMES.ETime = T.MaxETime
答案 1 :(得分:0)
您可以先找到每个版本的每个案例的最新=最大(时间)?
select Fname,Ver,max(etime) from NAMES group by Fname,Ver;
从那里你会再次加入它来显示整个事物?
select *
from
NAMES
inner join
(select Fname,Ver,max(etime) as etime from NAMES group by Fname,Ver ) sub1
using (Fname,Ver,etime)
order by fname,Ver;