我有以下数据集(摘录):
这是从转储到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。
答案 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/