Как найти время начала последнего маршрута GPS - PullRequest
2 голосов
/ 13 марта 2019

У меня есть данные с GPS трекеров.Скажем, что-то вроде:

CREATE TABLE IF NOT EXISTS `tab_gps` (
  `id` int(6) unsigned NOT NULL,
  `speed` int(3) unsigned NOT NULL,
  `time` time NOT NULL,
  `tracker_name` varchar(200) NOT NULL,
  PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8;

и некоторые примеры данных:

  ('1', '5', '07:00', 'car'),
  ('2', '10', '07:10', 'car'),
  ('3', '0', '07:20', 'bus'),
  ('4', '0', '07:30', 'car'),
  ('5', '0', '07:40', 'car'),
  ('6', '0', '07:50', 'car'),
  ('7', '20', '08:00', 'car'),
  ('8', '40', '08:10', 'bus'),
  ('9', '15', '08:15', 'car'),
  ('10', '0', '08:32', 'car'),
  ('11', '0', '08:40', 'car'),
  ('12', '0', '08:52', 'bus'),
  ('13', '12', '09:10', 'car'),
  ('14', '0', '09:25', 'car'),
  ('15', '0', '09:30', 'car'),
  ('16', '0', '09:35', 'car'),
  ('17', '10', '09:41', 'car'),
  ('18', '5', '09:46', 'car');
  ('19', '0', '09:50', 'car');

Вопрос в том, как найти время, когда конкретное имя_трекера начало свой маршрут

Итак, в моем примере алгоритм в моей голове:

  • SELECT * FROM tab_gps ГДЕ tracker_name = 'car' тогда
  • найти последнюю позицию со скоростью = 0(которые имеют следующие позиции> 0)
  • , а следующая позиция - это ВРЕМЯ, которое я ищу

В моем примере это позиция время: 09:41 (id = 17)

Я пытаюсь использовать:

select max(time) from tab_gps where tracker_name='car' and speed <>0

Вот Скрипка для лучшего понимания: http://sqlfiddle.com/#!9/834371

1 Ответ

0 голосов
/ 13 марта 2019

Ну, для окончательного маршрута вы можете сделать:

select g.*
from tab_gp2 g
where g.tracker_name = 'car' and
      g.id > (select coalesce(max(g2.id), -1)
              from tab_gps g2
              where g2.speed = 0 and g2.tracker_name = 'car'
             );

Здесь - скрипта db <>, иллюстрирующая логику.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...