我有所附图片的记录。最后一列有收到的纬度和经度日期和时间。现在,我想从下面的date列中选择每分钟一条记录。是否有任何MySQL查询来执行操作?
http://i.imgur.com/Z9i4u3x.png
发布于 2015-06-05 11:35:27
你可以这样做:
SELECT col1, col2, col3, colN, MAX(TimeAndDateColumn)
FROM table
GROUP BY DATE(TameAndDateColumn), HOUR(TimeAndDateColumn), Minute(TimeAndDateColumn)这里是SQL Fiddle,这是一些其他表,但是只是为了看看这个例子是如何工作的.
吉尔!
编辑(使用列名查询)
SELECT id, latitute, longitude, speed, MAX(`time`)
FROM YourTableName
GROUP BY DATE(`time`), HOUR(`time`), Minute(`time`)发布于 2015-06-05 11:25:37
您应该有一列时间,以达到所需的精度。然后,您可以将最后的结果排序到顶部,并在查询中使用limit 1。
无论如何,您应该有一个轮询机制来在每分钟内触发查询。
发布于 2015-06-05 11:36:16
您的问题还不清楚,但我相信您正在寻找一个查询,该查询将过滤表的内容,以便在每个“日历分钟”中最多返回一条记录。也就是说,如果多个记录发生在同一日历分钟内,则只能得到其中一个记录。
试着做这样的事情:
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,连接获取与这些id值关联的详细记录。如果您想得到最新的观察结果,请改用MAX(id)。
请注意。我是GROUP BY的纯粹主义者。我不喜欢GROUP BY。
https://stackoverflow.com/questions/30665081
复制相似问题