Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите сделать выборку по времени, выделить старт и стоп интервалов 
:(
    Опции темы
AonMaster
Дата 7.10.2014, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 7.10.2014

Репутация: нет
Всего: нет



Есть лог файл, такого вида:
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, а тут другое.

Вот моя таблица:

mysql> select * from domofon;
Код

+----+---------------------+-------+
| 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)

Заранее спасибо!
PM MAIL   Вверх
tzirechnoy
Дата 8.10.2014, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 2
Всего: 16



Код
GROUP BY round(EXTRACT( EPOCH from date )/N);


Это для postgres, но идея думаю понятна.
PM MAIL   Вверх
AonMaster
Дата 8.10.2014, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 7.10.2014

Репутация: нет
Всего: нет



Увы, не понятна :(

в mysql такого нет?
PM MAIL   Вверх
Zloxa
Дата 8.10.2014, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



select min(date), max(date)
from domofon
group by truncate(unix_timestamp/N)

Это сообщение отредактировал(а) Zloxa - 8.10.2014, 20:58


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
AonMaster
Дата 12.10.2014, 05:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 7.10.2014

Репутация: нет
Всего: нет



Zloxa
Спасибо) в первом приближении работает, но не всегда, т.к. высчитывает не разницу в секундах, а по-другому. Иногда округляет не туда.

Поточнее есть вариант?
PM MAIL   Вверх
Zloxa
Дата 12.10.2014, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(AonMaster @  12.10.2014,  06:30 Найти цитируемый пост)
Поточнее есть вариант? 

поточнее можете свормулирввать, чем не устраивает предложенное?


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
AonMaster
Дата 13.10.2014, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 7.10.2014

Репутация: нет
Всего: нет



Не всегда правильно разбивает по интервалам в 10 или 13 секунд.

PM MAIL   Вверх
Akina
Дата 13.10.2014, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Zloxa, По-моему, ему надо вот что: выбросить из выборки все записи, для которых разность между этой и следующей при сортировке по времени записи менее установленного интервала (10 секунд, например). В принципе, получается, что-то типа
Код


SELECT t1.*
FROM table t1
LEFT JOIN table t2
ON DATEDIFF('s',t1.datetime, t2.datetime) BETWEEN 0 AND 10
WHERE t2.datetime IS NULL



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0713 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.