如何每小时获得一排?

时间:2015-07-12 16:02:41

标签: mysql

我有一个mysql表,大约每2分钟包含一行。该表有两列(id和timestamp)。

我的问题是:我如何只获得每小时的第一行?

例如:

2015-07-12 14:01:23
2015-07-12 15:02:20
2015-07-12 16:03:53
2015-07-12 17:02:45

依旧......

3 个答案:

答案 0 :(得分:1)

您可以使用以下查询:

SELECT MIN(timestamp)
FROM mytable
GROUP BY DATE(timestamp), HOUR(timestamp)

这将选择每小时最低timestamp。如果您还想要id列,那么您可以将上述查询用作派生表并连接回原始表。

Demo here

答案 1 :(得分:1)

您可以使用group byjoin

SELECT t.*
FROM table t JOIN
     (SELECT MIN(timestamp) as mints
      FROM mytable
      GROUP BY DATE(timestamp), HOUR(timestamp)
     ) tt
     ON t.timestamp = tt.mints;

如果您假设id随时间戳递增,则只需要一个聚合:

      SELECT MIN(timestamp) as timestamp, MIN(id) as id
      FROM mytable
      GROUP BY DATE(timestamp), HOUR(timestamp);

然而,这取决于id随时间递增的假设。并且,您无法从表中轻松获取其他列(如果有的话)。

答案 2 :(得分:0)

假设您的表名为mytable,您可以尝试:

SELECT * FROM (SELECT * FROM MYTABLE ORDER BY ID, TIMESTAMP) AS TBL GROUP BY ID;

希望这有帮助。