2015-06-05 74 views

回答

1

那麼你可以做這樣的事情:

SELECT col1, col2, col3, colN, MAX(TimeAndDateColumn) 
FROM table 
GROUP BY DATE(TameAndDateColumn), HOUR(TimeAndDateColumn), Minute(TimeAndDateColumn) 

這裏是SQL Fiddle.這是一些其他的表,但只是爲了看看如何在例如這項工作...

GL!

編輯(與你的列名查詢)

SELECT id, latitute, longitude, speed, MAX(`time`) 
FROM YourTableName 
GROUP BY DATE(`time`), HOUR(`time`), Minute(`time`) 
+0

謝謝...其工作完全... –

+0

@SubaragaSundaram不客氣。我很高興我可以幫助:) –

0

你應該有一個時間列中精度要求。然後,您可以按時間排序[上一結果至上]並在查詢中使用limit 1

無論如何,你應該有一個輪詢機制在每一分鐘內觸發查詢。

0

你的問題不太清楚,但我相信你正在尋找一個查詢,將篩選表最多返回的內容每個「日曆分鐘」都有一個記錄。也就是說,如果多個記錄在同一個日曆分鐘內發生,您只能獲得其中的一個。

嘗試這樣:

SELECT DATE_FORMAT(time_stamp, '%Y-%m-%d %H:%i:00') time_stamp, 
     AVG(lat) lat, AVG(lon) lon 
    FROM table 
GROUP BY DATE_FORMAT(time_stamp, '%Y-%m-%d %H:%i:00') 

這將讓你在那一分鐘的平均倉位計算。訣竅是DATE_FORMAT(time_stamp, '%Y-%m-%d %H:%i:00')time_stamp值截斷爲前一個日曆分鐘,GROUP BY將它們聚合。

您可以在每分鐘內得到第一個或最後一個測量結果,但這很難。如果您的id值總是隨着time_stamp的增加而上升,則可以使此效率更高。該查詢將獲取每個日曆分鐘中的第一個觀測值。

SELECT a.lat, a.lon, a.time_stamp 
    FROM table a 
    JOIN (
      SELECT MIN(id) id 
      FROM table 
      GROUP BY DATE_FORMAT(time_stamp, '%Y-%m-%d %H:%i:00') 
     ) b ON a.id = b.id 

內部查詢獲取的每個日曆分鐘最早觀察id,並且JOIN取出與這些ID值相關聯的詳細記錄。如果您需要最新觀察結果,請改用MAX(id)

注意。我是純粹主義者GROUP BY。我不喜歡nondeterministic behavior of the MySQL extension to GROUP BY

0
SELECT AVG(long), AVG(lat), timestamp 
FROM table 
GROUP BY round(UNIX_TIMESTAMP(timestamp)/60)