我意识到数据库查询返回了意外结果,这与我对“DISTINCT ON”和“GROUP BY”的不当使用有关
我希望有人可以让我明白这一点。实际的查询非常复杂,所以我将其简化:
我有一个由 object_id 和时间戳组成的表/内部查询:
CREATE TABLE test_select ( object_id INT , event_timestamp timestamp );
COPY test_select (object_id , event_timestamp) FROM stdin (DELIMITER '|');
1 | 2013-01-27 21:01:20
1 | 2012-06-28 14:36:26
1 | 2013-02-21 04:16:48
2 | 2012-06-27 19:53:05
2 | 2013-02-03 17:35:58
3 | 2012-06-14 20:17:00
3 | 2013-02-15 19:03:34
4 | 2012-06-13 13:59:47
4 | 2013-02-23 06:31:16
5 | 2012-07-03 01:45:56
5 | 2012-06-11 21:33:26
\.
我正在尝试选择一个不同的 ID ,由反向 chron 上的时间戳排序/去重
所以结果应该是 [ 4, 1, 3, 2, 5 ]
我认为这可以满足我的需要(似乎):
SELECT object_id
FROM test_select
GROUP BY object_id
ORDER BY max(event_timestamp) DESC
;
出于测试/审计目的,我有时想包含时间戳字段。我似乎无法弄清楚如何在该查询中包含另一个字段。
谁能指出我上面的 sql 中的明显问题,或者关于如何包含审计信息的建议?