powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Статистика событий по часам.
11 сообщений из 11, страница 1 из 1
Статистика событий по часам.
    #38627973
gipsdz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Есть таблица, в которой учитывается время входа и выхода.
Посоветуйте, пожалуйста, как можно получить статистику занятости места по часам или просто по заданному промежутку?

К примеру, по вторникам с 15:00 до 16:00.

ID Enter Entersek Exit Exitsek Duration Durationsek Day of week N3442 2014-04-26 11:57:17 1398499037 2014-04-26 12:10:09 1398499809 00:12:52 772 Saturday 43443 2014-04-26 13:08:36 1398503316 2014-04-26 14:03:14 1398506594 00:54:38 3278 Saturday 23444 2014-04-26 14:46:56 1398509216 2014-04-26 15:40:43 1398512443 00:53:47 3227 Saturday 73445 2014-04-26 16:21:17 1398514877 2014-04-26 16:53:53 1398516833 00:32:36 1956 Saturday 63446 2014-04-26 17:50:09 1398520209 2014-04-26 18:13:54 1398521634 00:23:45 1425 Saturday 43447 2014-04-26 18:54:05 1398524045 2014-04-26 19:09:19 1398524959 00:15:14 914 Saturday 43448 2014-04-26 19:55:46 1398527746 2014-04-26 20:43:36 1398530616 00:47:50 2870 Saturday 63449 2014-04-26 21:29:57 1398533397 2014-04-26 22:22:35 1398536555 00:52:38 3158 Saturday 23450 2014-04-26 23:03:26 1398539006 2014-04-26 23:38:40 1398541120 00:35:14 2114 Saturday 1
...
Рейтинг: 0 / 0
Статистика событий по часам.
    #38627978
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что есть "место" и какая именно статистика нужна?
...
Рейтинг: 0 / 0
Статистика событий по часам.
    #38627991
gipsdz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,

Место - гараж. Нужно получить статистику его занятости в зависимости от времени суток и дней недели.
...
Рейтинг: 0 / 0
Статистика событий по часам.
    #38627996
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gipsdzМесто - гараж.Нет, что есть "место" в контексте исходной таблицы?
...
Рейтинг: 0 / 0
Статистика событий по часам.
    #38628006
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это смотря какая статистика нужна. Конкретизируйте какие величины вам нужны
...
Рейтинг: 0 / 0
Статистика событий по часам.
    #38628010
gipsdz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,

Это все данные по одному гаражу. Таблица выглядит так:
1 Number int(11) AUTO_INCREMENT - ID
2 Enter datetime - Время въезда
3 Entertimestamp int(11) - секунды с 70
4 Exit datetime - Время выезда
5 Exittimestamp int(11) - секунды
6 duration time - продолжительность пребывания
7 durstamp int(11) - продолжительность в секундах
...
Рейтинг: 0 / 0
Статистика событий по часам.
    #38628016
gipsdz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
chabapok,

К примеру, по субботам с 18 до 19 гараж был занят 19 минут 49 секунд.
Исходя только из данных ниже,
...
Рейтинг: 0 / 0
Статистика событий по часам.
    #38628101
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собственно для решения задачи нужно иметь опорную таблицу интервалов (вероятно, часов), типа
starttimeendtime2014-04-26 00:00:002014-04-26 01:00:002014-04-26 01:00:002014-04-26 02:00:002014-04-26 03:00:002014-04-26 03:00:00......
После чего вяжем к ней справа таблицу данных и тупо считаем
Код: sql
1.
SUM(LEAST(data.ens,interval.end)-GREATEST(data.start,interval.start))


для каждого интервала, установив в качестве критерия отбора наложение интервалов.
Ну и всё собсно...
...
Рейтинг: 0 / 0
Статистика событий по часам.
    #38628118
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И чего я решил, что это по MS SQL? ...
Ну да не выбрасывать же, жалко...
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
if OBJECT_ID('tempdb..#myTable') is not null drop table #myTable
create table #myTable (
   ID int primary key, 
   dt_Enter datetime,
   dt_Exit datetime);
create index ix_myTable_dts on #myTable(dt_Enter, dt_Exit);
insert #myTable  values
    (3442,'20140426 11:57:17','20140426 12:10:09')
   ,(3443,'20140426 13:08:36','20140426 14:03:14')
   ,(3444,'20140426 14:46:56','20140426 15:40:43')
   ,(3445,'20140426 16:21:17','20140426 16:53:53')
   -- ,(3446,'20140426 17:50:09','20140426 18:13:54')
   ,(3447,'20140426 18:54:05','20140426 19:09:19')
   ,(3448,'20140426 19:55:46','20140426 20:43:36')
   ,(3449,'20140426 21:29:57','20140426 22:22:35')
   ,(3450,'20140426 23:03:26','20140426 23:38:40')
   ;

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
declare @dt1 datetime='20140426 00:00', @dt2 datetime='20140426 19:00'

select r.dt1, r.dt2, convert(time,dateadd(SECOND, sum(tm.time_in_range),0))time_in_range
from master..spt_values v 
cross apply(select dateadd(HOUR, v.number, @dt1), dateadd(HOUR, v.number+1, @dt1))r(dt1,dt2)
cross apply(
   select 
      ID, dt_Enter, dt_Exit, 
      datediff(SECOND, dateadd(SECOND, iif(s.sb<0,0,s.sb),r.dt1), dateadd(SECOND, iif(s.se<0,0,-s.se), r.dt2))time_in_range
   from #myTable t
   cross apply(select datediff(SECOND, r.dt1, t.dt_Enter), datediff(SECOND,t.dt_Exit, r.dt2))s(sb,se)
   where t.dt_Exit>=r.dt1 and t.dt_Enter<r.dt2
   )tm
where v.type='P' and v.number<datediff(HOUR, @dt1, @dt2)
group by r.dt1, r.dt2;

dt1dt2time_in_range2014-04-26 11:00:00.0002014-04-26 12:00:00.00000:02:43.0002014-04-26 12:00:00.0002014-04-26 13:00:00.00000:10:09.0002014-04-26 13:00:00.0002014-04-26 14:00:00.00000:51:24.0002014-04-26 14:00:00.0002014-04-26 15:00:00.00000:16:18.0002014-04-26 15:00:00.0002014-04-26 16:00:00.00000:40:43.0002014-04-26 16:00:00.0002014-04-26 17:00:00.00000:32:36.0002014-04-26 17:00:00.0002014-04-26 18:00:00.00000:09:51.0002014-04-26 18:00:00.0002014-04-26 19:00:00.00000:19:49.000
...
Рейтинг: 0 / 0
Статистика событий по часам.
    #38629574
gipsdz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо большое за советы!

Пойду пытаться применить:)
...
Рейтинг: 0 / 0
Статистика событий по часам.
    #38629699
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gipsdzПойду пытаться применить:)Комментарии по MS SQL

первые 2 строки (from,cross apply as r) строят из индексированной таблицы чисел master.dbo.spt_values (numbers в диапазоне 0..2048) почасовые диапазоны по количеству полных часов между двумя предварительно заданными временнЫми границами

второй cross apply подтягивает из таблицы данных к каждому построенному диапазону все "задевающие" его данные и подсчитывает длительность пересечения в секундах

затем выполняется группировка по почасовым диапазонам, для каждого диапазона подсчитывается сумма "пересекающих" секунд, и затем сумма секунд превращается в тип "время" (чч:мм:сс)

В общем, все как написал Akina

К сожалению, в MySQL нет CROSS APPLY, зато работа с датами/временем, как я понял, реализована значительно проще

Успешного решения вам:)
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Статистика событий по часам.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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