2015-06-05 73 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)