MYSQL-每分钟获取一条记录

时间:2015-06-05 11:10:57

标签: mysql

我根据附件图片记录。最后一列有经纬度的日期和时间。现在我想从日期列中的以下数据中选择每分钟一条记录。是否有任何MySQL查询来执行操作?

http://i.imgur.com/Z9i4u3x.png

4 个答案:

答案 0 :(得分: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`)

答案 1 :(得分:0)

您应该有一列时间到达所需的精度。然后,您可以按时间排序[最后结果到顶部]并在查询中使用limit 1

无论如何,你应该有一个轮询机制来在每分钟触发查询。

答案 2 :(得分:0)

您的问题并不清楚,但我相信您正在寻找一个过滤表格内容的查询,以便在每个"日历分钟内最多返回一条记录。&#34 ;也就是说,如果在同一日历分钟内出现多个记录,则只能获得其中一个记录。

尝试这样的事情:

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

答案 3 :(得分:0)

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