无法打印出表格的最新结果

时间:2014-08-01 14:12:09

标签: mysql sql

我有下表:

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

基本上它需要最长时间,但它并没有真正打印出正确的数据,它打印了最大时间,但它打印了整个唯一数据组的初始时间,而不是特定测试的初始时间(记录)。

我已经尝试了很长时间来解决这个问题,但我似乎没有去过那里。我觉得这里有一个加入,但我也尝试过,没有运气。

感谢任何帮助, 谢谢。

2 个答案:

答案 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;