Mysql:为相同的ID找到更高的值

时间:2018-02-01 10:04:06

标签: mysql sql

我有以下数据集(摘录):

enter image description here

这是从转储到mysql中的测试管理工具中提取的。您所看到的是一种能够测试并运行结果的视图。 您有与运行相关的测试(test_id,测试名称)(

86行 66个独特的test_ids

问题:

让我们参加test_id 84013。 如你所见,我们有2次运行,在不同的时间运行。 在2中,我想要最新的。

我尝试过的事情:

SELECT * 
FROM test_results A INNER JOIN test_results B ON A.test_Id = B.test_Id 
WHERE A.started > B.started

但这只给了我21行,我预计至少有66行(独特的test_id,运行结果)。

我该怎么办?

我喜欢纯粹的SQL方法,但也乐于使用Python。

3 个答案:

答案 0 :(得分:2)

在日期列中使用带有GROUP BY聚合的MAX子句:

SELECT test_id, MAX(started)
FROM test_results
GROUP BY test_id

答案 1 :(得分:0)

您必须为每个测试选择具有最大日期的行,然后显示该行的信息:

您可以使用分组,并确定每个测试的最后日期,然后选择具有相同ID和最大日期的行

SELECT *
FROM test_results tr
JOIN
  ( SELECT test_id ,
           max(started) maxdate
   FROM test_results
   GROUP BY test_id ) tmax ON tr.test_id = tmax.test_id
AND tr.started = tmax.maxdate

答案 2 :(得分:0)

我发现这个解决方案不需要使用GROUPBY,当你有大量行来获得结果时,它会遇到性能不佳的情况。

SELECT t1.*
FROM test_results t1 LEFT JOIN test_results t2
 ON (t1.test_Id = t2.test_Id and t1.started < t2.started)
WHERE t2.started IS NULL

这个想法是每个组中的最后一行找不到具有较新started的匹配。

您可以在此处查看原文http://fellowtuts.com/mysql/retrieving-the-last-record-in-each-group/