mysql - 如何从每组行的最小和最大时间戳中选择mysql数据

标签 mysql sql select gps timestamp

我有一个 mysql 表,其中包含来自汽车 gps 跟踪器的数据(纬度、经度、速度、时间)。我想选择汽车停止(速度 = 0)超过 10 分钟、30 分钟、1 小时等的位置(纬度、经度和时间)。

我的表格是这样的:

id  latitude            longitude           speed   time
-----------------------------------------------------------------------
304 52.388983333333336  17.025338333333334  33.67   2014-03-26 08:00:04
305 52.39029            17.023776666666667  34.65   2014-03-26 08:00:14
306 52.391035           17.021631666666668  32.91   2014-03-26 08:00:24
307 52.39103166666666   17.01917            30.03   2014-03-26 08:00:34
308 52.39089833333333   17.01698            29.33   2014-03-26 08:00:44
309 52.390593333333335  17.01532            9.54    2014-03-26 08:00:54
310 52.39071333333333   17.015056666666666  0       2014-03-26 08:01:04
311 52.39105333333333   17.01499            10.3    2014-03-26 08:01:14
312 52.391485           17.01488            7.82    2014-03-26 08:01:24
313 52.391705           17.014815           0       2014-03-26 08:01:34
314 52.391705           17.014815           0       2014-03-26 08:01:44
315 52.391705           17.014815           0       2014-03-26 08:01:54
316 52.391705           17.014815           0       2014-03-26 08:02:04
317 52.391705           17.014815           0       2014-03-26 08:02:14
318 52.391705           17.014815           0       2014-03-26 08:02:24
319 52.39232333333333   17.014648333333334  7.12    2014-03-26 08:02:34
320 52.392345           17.014635           0       2014-03-26 08:02:44
321 52.392345           17.014635           0       2014-03-26 08:02:54
322 52.392345           17.014635           0       2014-03-26 08:03:04
323 52.392345           17.014635           0       2014-03-26 08:03:15
324 52.392345           17.014635           0       2014-03-26 08:03:25
325 52.392345           17.014635           0       2014-03-26 08:03:35
326 52.392558333333334  17.014471666666665  14.11   2014-03-26 08:03:45
327 52.392316666666666  17.012883333333335  27.47   2014-03-26 08:03:55
328 52.39194333333333   17.010871666666667  28.93   2014-03-26 08:04:05
329 52.39152333333333   17.00893            22.28   2014-03-26 08:04:15
330 52.391575           17.007181666666668  27.01   2014-03-26 08:04:25
331 52.39164            17.00501            26.48   2014-03-26 08:04:35
332 52.39159333333333   17.002895           28.34   2014-03-26 08:04:45
333 52.391641666666665  17.000795           26.39   2014-03-26 08:04:55
334 52.392156666666665  16.999178333333333  16.56   2014-03-26 08:05:05
335 52.39223666666667   16.998796666666667  0       2014-03-26 08:05:15
336 52.39234            16.99819            15.38   2014-03-26 08:05:25
337 52.39261166666667   16.996865           17.1    2014-03-26 08:05:35
338 52.392896666666665  16.995643333333334  20.91   2014-03-26 08:05:45
339 52.39313666666666   16.99468            7.5     2014-03-26 08:05:55
340 52.39331833333333   16.993918333333333  9.1     2014-03-26 08:06:05
341 52.3936             16.992806666666667  16.86   2014-03-26 08:06:15
342 52.393746666666665  16.992065           4.72    2014-03-26 08:06:25

寻求帮助,有什么想法吗?

最佳答案

您需要为每个“0”记录添加一个标识符,以便将它们组合在一起。一个简单的度量是数据中它之前的非零记录的数量。

select latitude, longitude, min(time) as StartTime, max(time) as EndTime
from (select t.*,
             (select count(*)
              from tracker t2
              where t2.time <= t.time and
                    t2.speed > 0
             ) as grp
      from tracker t
     ) t
group by grp, latitude, longitude;

然后您可以使用 having 子句来获取您感兴趣的行:

having max(time) >= min(time) + interval 1 hour

例如。

关于mysql - 如何从每组行的最小和最大时间戳中选择mysql数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22734158/

相关文章:

MySQL 错误号 : 150 "Foreign key constraint is incorrectly formed"

mysql - 在 MySql 中计算组内的不同重复项

php - PDO 在另一个数据库的表中插入查询不起作用

sql - 在HIVE SQL中替换NULL或空值的函数

sql - 从 SQL 中的多个数据库中选择 COUNT()

mysql - 使值等于平均值

php - Dreamweaver SQL 语法错误

php - 将两个查询合并为一个查询 Laravel

mysql - 如何使用 GROUP BY 显示多个对象,而不是每个分组仅显示一个对象?

MySQL - 在 varchar 列上选择 0(零)作为条件返回所有行?