具有相同GUID的多个列,每个GUID获取最新列

时间:2017-03-25 02:22:43

标签: mysql group-by

我有一个包含几百万列的表格。有两个或三个具有相同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

输出顺序并不重要。我根本不知道从哪里开始。

2 个答案:

答案 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

祝你好运。