2015-07-12 35 views
0

我有一個約每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 

等等...

回答

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隨時間增加的假設。而且,你不能輕易地從表中取出其他列(如果有的話)。

0

假設你的表稱爲mytable,你可以試試這個:

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

希望這有助於。

1

您可以使用下面的查詢:

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

這將選擇每小時最低timestamp。如果您還想要id列,那麼您可以將上述查詢用作派生表並將其返回到原始表。

Demo here