Mysql:返回具有不同键的所有行,如果相同的键,则采用具有最高时间戳的行

时间:2016-03-03 18:11:27

标签: mysql sql group-by

我有一张如下表格。

+---------+-----------+
|   key   |    ts     |
+---------+-----------+
|   key1  | 1200000000|
+---------+-----------+
|   key1  | 1300000000|
+---------+-----------+
|   key2  | 1200000000|
+---------+-----------+

我想选择*,这样我就可以获得所有不同的'密钥'。对于具有相同键的行,那么我想要具有最高ts的行。所以在这个例子中,我想返回:

+---------+-----------+
|   key1  | 1300000000|
+---------+-----------+
|   key2  | 1200000000|
+---------+-----------+

我认为它是MAX和GROUP BY键的组合,但无法弄明白。

由于

2 个答案:

答案 0 :(得分:0)

就像你自己说的那样,仅仅是key列的分组问题,ts列的最大值

select key, max(ts) from yourTable group by key

答案 1 :(得分:0)

这是一个简单的解决方案:

SELECT
  *
FROM
  tbl t
WHERE
  NOT EXISTS(SELECT * FROM tbl WHERE ts < t.ts AND key = t.key)

替代方法是按键分组并获取子选择中每个键的最大值(ts),然后使用键和ts上的原始表进行内连接以获取其余列。