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