我有一个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
依旧......
答案 0 :(得分:1)
您可以使用以下查询:
SELECT MIN(timestamp)
FROM mytable
GROUP BY DATE(timestamp), HOUR(timestamp)
这将选择每小时最低timestamp
。如果您还想要id
列,那么您可以将上述查询用作派生表并连接回原始表。
答案 1 :(得分:1)
您可以使用group by
和join
:
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;
希望这有帮助。