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

时间:2014-03-29 17:13:34

标签: mysql sql select gps timestamp

我有一个mysql表,其中包含来自car gps tracker(lat,lng,speed,time)的数据。我想选择汽车停止的位置(纬度,经度和时间)(速度= 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

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

1 个答案:

答案 0 :(得分:0)

您需要为每个" 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

例如。