我有一個約每2分鐘包含一行的mysql表。該表有兩列(id和時間戳)。如何獲得每小時一行?
我的問題是:如何獲得每小時只有第一行?
例如:
2015-07-12 14:01:23
2015-07-12 15:02:20
2015-07-12 16:03:53
2015-07-12 17:02:45
等等...
我有一個約每2分鐘包含一行的mysql表。該表有兩列(id和時間戳)。如何獲得每小時一行?
我的問題是:如何獲得每小時只有第一行?
例如:
2015-07-12 14:01:23
2015-07-12 15:02:20
2015-07-12 16:03:53
2015-07-12 17:02:45
等等...
您可以使用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隨時間增加的假設。而且,你不能輕易地從表中取出其他列(如果有的話)。
假設你的表稱爲mytable
,你可以試試這個:
SELECT * FROM (SELECT * FROM MYTABLE ORDER BY ID, TIMESTAMP) AS TBL GROUP BY ID;
希望這有助於。
您可以使用下面的查詢:
SELECT MIN(timestamp)
FROM mytable
GROUP BY DATE(timestamp), HOUR(timestamp)
這將選擇每小時最低timestamp
。如果您還想要id
列,那麼您可以將上述查詢用作派生表並將其返回到原始表。