我有一个包含几百万列的表格。有两个或三个具有相同GUID的列;由于修改,每一个都包含略有不同的信息 - 历史记录存储用于其他目的。我希望每个GUID只获得一列,最新的一个基于unix时间戳列,存储为unix时间戳。
例如:
id guid body timestamp
1 dhf Hello world 3857370
2 jdr Hello 3852062
3 leb Goodbye 3105893
4 dhf Hello earth 3857362
5 leb Bye 3105891
6 jdr Hi 3852068
7 dhf Test msg 3857374
应该返回:
id guid body timestamp
5 leb Bye 3105891
6 jdr Hi 3852068
3 leb Goodbye 3105893
输出顺序并不重要。我根本不知道从哪里开始。
答案 0 :(得分:0)
这是一种方法:
select t.*
from t
where t.timestamp = (select max(t2.timestamp)
from t t2
where t2.guid = t.guid
);
为了提高效果,请在t(guid, timestamp)
上创建索引。
答案 1 :(得分:0)
使用GROUP BY和JOIN:
SELECT t.*
FROM TEST_TABLE t
INNER JOIN (SELECT GUID, MAX(TIMESTAMP) AS MAX_TIMESTAMP
FROM TEST_TABLE
GROUP BY GUID) t2
ON t2.GUID = t.GUID AND
t2.MAX_TIMESTAMP = t.TIMESTAMP
ORDER BY t.GUID
祝你好运。