如果标题有点令人困惑,我很抱歉,但这是我的数据库表:
id test_id result test_timestamp
1 5 1 2014-10-21 09:22:59
2 5 2 2014-10-21 09:25:12
3 7 3 2014-10-21 09:23:10
4 7 1 2014-10-21 09:19:51
5 7 2 2014-10-21 09:20:00
我想要做的是选择具有最新时间戳及其结果的不同test_id,结果将是:
id test_id result test_timestamp
2 5 2 2014-10-21 09:25:12
3 7 3 2014-10-21 09:23:10
获取test_id和timestamp
没问题SELECT distinct(method_id), max(test_timestamp) from results group by method_id
但是当我想要结果时,我得到了所有可能的结果,它带有test_id的最新时间戳,我知道为什么我得到这个,但我不知道如何解决它。
SELECT distinct(method_id), max(test_timestamp), result from results group by method_id, result
答案 0 :(得分:1)
对于PostgreSQL,DISTINCT ON
extension是执行此操作的最快速,最简单的方法:
SELECT DISTINCT ON (test_id)
id, test_id, result, test_timestamp
FROM results
ORDER BY test_id, test_timestamp DESC, result;
答案 1 :(得分:0)
如果你不想使用PostgreSQL特殊的 distinct 语法,这里有一个简单的过滤方式:
SELECT
id, test_id, result, test_timestamp
FROM results
where test_timestamp = (select max(test_timestamp) from results r2 where r2.test_id=results.test_id)
http://sqlfiddle.com/#!15/f5be6/2/0
如果一个 test_id 有两行,并且具有相同的最大值 test_timestamp ,则会出现差异。然后,此SQL为此最大时间戳提供所有行,而distinct on
仅提供第一个时间戳。