首页 > 解决方案 > 最新数据按最新日期和试运行排序

问题描述

我想知道是否有一种简单的方法来对表格视图进行排序,因此您只能获得按日期排序的每个最新的不同测试运行。

我有一个包含日期、引擎(就像测试的项目名称,它会根据测试而变化)和每次运行的 ID 的表。

SELECT 
    `testjob`.`id` AS `Testjobid`,
    `testjob`.`engine` AS `Engine`,
    `testjob`.`StartTime`
    FROM TestRun
    ORDER BY `testjob`.`StartTime` DESC

所以在 SQL 运行之后,会显示这个表:

SQL 表

但实际上我只需要这个:

需要的 SQL

注意:这个表每天都会更新,引擎名称也会随着时间的推移而变化,所以我不能只输入三个引擎名称并以这种方式获取最新数据。我能想到的唯一解决方案是制作一个 SQL 来获取每个引擎的名称,然后制作一个循环来遍历每个引擎的表,但我希望有比这更好的方法吗?

标签: mysqlsql

解决方案


您可以使用相关子查询:

select tr.*
from TestRun tr
where tr.StartTime = (select max(tr1.StartTime) from TestRun tr1 where tr1.engine = tr.engine);

在较新的版本中,您可以使用row_number()

select tr.*
from (select tr.*, row_number() over (partition by tr.engine order by tr.StartTime desc) as seq
      from TestRun tr
     ) tr
where tr.seq = 1;

如果您有关系,starttime则子查询将需要修改为limit 1.


推荐阅读