Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите сделать выборку по времени, выделить старт и стоп / 10 сообщений из 10, страница 1 из 1
04.10.2014, 07:59:20
    #38766776
AonMaster
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите сделать выборку по времени, выделить старт и стоп
Есть лог файл, такого вида:
2014-10-04 01:16:17 - Открыта дверь подъезда
2014-10-04 01:16:26 - Открыта дверь подъезда
2014-10-04 03:01:14 - Открыта дверь подъезда
2014-10-04 03:01:24 - Открыта дверь подъезда
2014-10-04 04:43:13 - Открыта дверь подъезда
2014-10-04 04:43:23 - Открыта дверь подъезда
2014-10-04 06:44:14 - Открыта дверь подъезда
2014-10-04 06:44:23 - Открыта дверь подъезда
2014-10-04 06:44:38 - Открыта дверь подъезда

Предполагается запихать его в базу MySQL.
Как видите, записи идут с интервалом около 10 секунд (должно определяться в запросе, скажем, N) - первая запись начало события, последняя - конец. Иногда записей внутри интервала N секунд бывает больше (последние 3 строки - 3 записи, но считаем, что событие одно).

Помогите написать запрос, чтоб результат выглядел так:
01:16:17 - 01:16:26 открыта дверь
03:01:14 - 03:01:24 открыта дверь
04:43:13 - 04:43:23 открыта дверь
06:44:14 - 06:44:38 открыта дверь

Если можно, с переходом через 00 часов (думаю, если в базе хранить дату в timestamp - это получится и так).
в инете находил лишь примеры группировки по строго заданным интервалам, скажем, с 00:10 до 00:20, а тут другое.
Заранее спасибо!
...
Рейтинг: 0 / 0
04.10.2014, 08:59:57
    #38766784
javajdbc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите сделать выборку по времени, выделить старт и стоп
AonMaster,

там я не помню как точно разницу времени
считать в секундах, посмотрите в руководстве...

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
SELECT
  event_id
  MIN(timey) AS start_time,
  MAX(timey) AS end_time
FROM
(
SELECT
  if(TIMEDIFF(t.timex-@a) > 10, @b:=@b+1, @b) AS event_id,
  @a:=t.timex AS timey
FROM 
  tableA t, 
  (select @a:=UNIX_TIMESTAMP('2000-01-01 00:00:00'), @b:=0) z
ORDER BY t.timex
) z2
GROUP BY event_id
...
Рейтинг: 0 / 0
04.10.2014, 11:38:15
    #38766830
AonMaster
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите сделать выборку по времени, выделить старт и стоп
Спасибо, ничего себе, как сложно.
Мне кажется, там где-то синтаксис не тот, и подскажите, таблицу назвать table а время должно быть уже переведенное в timestamp и находится в поле t?

а event_id это второе поле, да?
Вложенные запросы никогда не делал, поэтому этот пример не понимаю вообще :(
...
Рейтинг: 0 / 0
04.10.2014, 12:29:26
    #38766841
AonMaster
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите сделать выборку по времени, выделить старт и стоп
Incorrect parameter count in the call to native function 'TIMEDIFF'
...
Рейтинг: 0 / 0
04.10.2014, 12:40:20
    #38766843
AonMaster
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите сделать выборку по времени, выделить старт и стоп
Вот моя таблица:

mysql> select * from domofon;
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
+----+---------------------+-------+
| id | date                | event |
+----+---------------------+-------+
|  1 | 2014-10-04 01:16:17 | 1     |
|  2 | 2014-10-04 01:16:26 | 1     |
|  3 | 2014-10-04 03:01:14 | 1     |
|  4 | 2014-10-04 03:01:24 | 1     |
+----+---------------------+-------+
4 rows in set (0.01 sec)
...
Рейтинг: 0 / 0
07.10.2014, 10:43:46
    #38768761
AonMaster
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите сделать выборку по времени, выделить старт и стоп
Неужели никто не подскажет?
...
Рейтинг: 0 / 0
07.10.2014, 10:51:26
    #38768773
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите сделать выборку по времени, выделить старт и стоп
Возьми две копии таблицы. Посчитай разность времени (копия 2 минус копия 1). Сгруппируй по записям первой копии. Выбери минимальную, но положительную, разность времени. Отфильтруй записи, где разность больше заданного интервала.
...
Рейтинг: 0 / 0
07.10.2014, 11:30:14
    #38768820
AonMaster
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите сделать выборку по времени, выделить старт и стоп
Как-то сложно с двумя копиями. Это что, каждый раз перед запросом копировать одну в другую? а таблица-то растёт...

Предложенный выше запрос подошёл бы, если б довести его до ума. У меня не хватает( вот прошу помощи.
...
Рейтинг: 0 / 0
07.10.2014, 11:48:06
    #38768847
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите сделать выборку по времени, выделить старт и стоп
AonMasterЭто что, каждый раз перед запросом копировать одну в другую?
Код: sql
1.
FROM table AS t1, table AS t2
...
Рейтинг: 0 / 0
07.10.2014, 15:02:26
    #38769179
AonMaster
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите сделать выборку по времени, выделить старт и стоп
Всё равно предложенные Вами манипуляции сложно мне осилить. Я давно не имел дела с SQL, сейчас прогресс ушел далеко. Проект это некоммерческий, изучать весь SQL возможности, увы, нет. Помогите составить запрос, пожалуйста.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите сделать выборку по времени, выделить старт и стоп / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]