首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MYSQL-每分钟取一条记录

MYSQL-每分钟取一条记录
EN

Stack Overflow用户
提问于 2015-06-05 11:10:56
回答 4查看 1.1K关注 0票数 0

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

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-06-05 11:35:27

你可以这样做:

代码语言:javascript
运行
复制
SELECT col1, col2, col3, colN, MAX(TimeAndDateColumn)
FROM table
GROUP BY DATE(TameAndDateColumn), HOUR(TimeAndDateColumn), Minute(TimeAndDateColumn)

这里是SQL Fiddle,这是一些其他表,但是只是为了看看这个例子是如何工作的.

吉尔!

编辑(使用列名查询)

代码语言:javascript
运行
复制
SELECT id, latitute, longitude, speed, MAX(`time`)
FROM YourTableName
GROUP BY DATE(`time`), HOUR(`time`), Minute(`time`)
票数 1
EN

Stack Overflow用户

发布于 2015-06-05 11:25:37

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

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

票数 0
EN

Stack Overflow用户

发布于 2015-06-05 11:36:16

您的问题还不清楚,但我相信您正在寻找一个查询,该查询将过滤表的内容,以便在每个“日历分钟”中最多返回一条记录。也就是说,如果多个记录发生在同一日历分钟内,则只能得到其中一个记录。

试着做这样的事情:

代码语言:javascript
运行
复制
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的上升而上升,那么您可以提高效率。此查询将在每个日历分钟中获取第一个观察结果。

代码语言:javascript
运行
复制
 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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30665081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档