powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Сложение временных интервалов.
13 сообщений из 13, страница 1 из 1
Сложение временных интервалов.
    #39041647
voffkamc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день. Подскажите, каким образом оптимально выполнить след. задачу:
Существует таблица, в которой есть столбцы дат начала и конца выполнения определенной задачи. Необходимо вычислить общее потраченное на выполнение задач время.
За 1 день - не проблема: (макс значения конца выполнения - мин. начала), а вот как вычислить допустим за неделю? В голову приходить лишь перебор дат в цикле, но как-то неправильно это. Направьте в нужное русло, каким образом это осуществить?
...
Рейтинг: 0 / 0
Сложение временных интервалов.
    #39041656
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
voffkamc,

Какой тип данных этих полей?
...
Рейтинг: 0 / 0
Сложение временных интервалов.
    #39041691
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
voffkamc,

если есть задачи не пересекающиеся по времени, то даже в течении дня вы не правильно найдете ОБЩЕЕ время выполнения
9-00 11-00
12-00 13-00
это всего 2 часа а не 3 (с минимума начала до макс конца)
задача не банальна
...
Рейтинг: 0 / 0
Сложение временных интервалов.
    #39041693
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinov,
поправка
это всего 3 часа а не 4 (с минимума начала до макс конца) - допустим был обед )
...
Рейтинг: 0 / 0
Сложение временных интервалов.
    #39041790
voffkamc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft, DATETIME

Alex_Ustinov, об этом не подумал, но благодаря вашему ответу понял как осуществить задачу.
...
Рейтинг: 0 / 0
Сложение временных интервалов.
    #39042005
voffkamc,

решай задачу в два этапа:
1) Объединить все пересекающиеся интервалы в один.
2) Посчитать сумму длин получившихся на первом шаге "мега-интервалов".
...
Рейтинг: 0 / 0
Сложение временных интервалов.
    #39042053
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://sqlfiddle.com/#!9/f091ad/1
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
create table myTable(
    id int auto_increment primary key
  , dtf datetime
  , dtt datetime
  );

insert myTable(dtf, dtt) values
    ('2015-09-03 03:00','2015-09-03 12:00')
  , ('2015-09-03 05:00','2015-09-03 15:00')
  , ('2015-09-03 06:00','2015-09-03 08:00')
  , ('2015-09-03 16:00','2015-09-03 21:00')
  , ('2015-09-03 17:00','2015-09-03 20:00')
  , ('2015-09-03 20:00','2015-09-03 23:00')
  ;

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
select 
  sum(
    if((@x:=@x+x)=0 -- конец увеличенного интервала
      , time_to_sec(timediff(dt,@dt))
      , least( -- начало увеличенного интервала
          @dt:=if(@x=1 and x=1,dt,@dt)
         ,0) -- внутри увеличенного интервала
        )
      )/3600 s_hour
from (
  select x
    , if(x=1
         , if(p.date_from<t.dtf, t.dtf, p.date_from)
         , if(t.dtt<p.date_to, t.dtt, p.date_to)
        )dt
  from (select -- параметры: заданный диапазон
       cast('2015-09-03 10:00' as datetime) date_from,
       cast('2015-09-03 18:00' as datetime) date_to
      )p,
    , myTable t
    , (select 1 x union all select -1)x
  where p.date_from<=t.dtt and t.dtf<=p.date_to
  order by dt, x desc
  )x,(select @df:=0,@x:=0)v


PS на MySQL еще не делал - интересно же... :)
...
Рейтинг: 0 / 0
Сложение временных интервалов.
    #39042060
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PPS.В последней строке достаточно
Код: sql
1.
  )x,(select @x:=0)v
...
Рейтинг: 0 / 0
Сложение временных интервалов.
    #39042219
Близнец1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Сложение временных интервалов.
    #39042329
Близнец1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Близнец1980voffkamc,

А TIMEDIFF http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_timediff смотрели - не оно?
Не, ошибся, не то.

Вот так норм:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
-- Немного изменим данные из примера Cygapb-007:

insert myTable(dtf, dtt) values
    ('2015-09-03 03:00','2015-09-03 12:15:25')
  , ('2015-09-03 05:00','2015-09-03 15:50:10')
  , ('2015-09-03 06:00','2015-09-03 8:00:55')
  , ('2015-09-03 16:00','2015-09-03 21:00')
  , ('2015-09-03 17:00','2015-09-03 20:00')
  , ('2015-09-03 20:00','2015-09-03 23:00')
  ;

-- Вот такая команда

SELECT SEC_TO_TIME(SUM(TO_SECONDS(dtt)- TO_SECONDS(dtf))) FROM myTable

-- Выдаст
1.09:06:30



Вроде то что нужно, не?
...
Рейтинг: 0 / 0
Сложение временных интервалов.
    #39042412
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Близнец1980,

мысль верна при непересекающихся диапазонах
...
Рейтинг: 0 / 0
Сложение временных интервалов.
    #39042526
Близнец1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinov,

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

P.S. Что гадать, ждем ответа ТС.
...
Рейтинг: 0 / 0
Сложение временных интервалов.
    #39042539
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я не гадаю, я это озвучил выше.
Если задачи непересекаются (может это контрольная двоешнику на лето), то решение очевидно.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Сложение временных интервалов.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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