powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / посчитать кол-во часов в наложениях рабочего графика
7 сообщений из 7, страница 1 из 1
посчитать кол-во часов в наложениях рабочего графика
    #39854542
ant_sol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
подскажите, пожалуйста, как решить такую задачу:
необходимо посчитать общую сумму часов в наложениях рабочего графика.
наложения - это когда в одно и тоже время работает более одного сотрудника.


таблица имеет вид:
EmployeeID
DateStart
DateEnd

где DateStart - дата и время начала работы в графике,
DateEnd - дата и время окончания работы в графике
...
Рейтинг: 0 / 0
посчитать кол-во часов в наложениях рабочего графика
    #39854612
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
set nocount on;

declare @t table( EmployeeID int, DateStart datetime, DateEnd datetime);

insert @t
  select 1, '20190101 10:07', '20190101 20:07'
  union all
  select 1, '20190102 10:07', '20190102 20:07'
  union all
  select 2, '20190102 15:07', '20190102 20:07'
  union all
  select 3, '20190102 15:07', '20190102 18:07'
  union all
  select 1, '20190103 10:07', '20190103 20:07'
  union all
  select 2, '20190103 14:07', '20190103 20:07'
  union all
  select 3, '20190103 15:07', '20190103 18:07'
  union all
  select 3, '20190103 18:10', '20190103 19:07'

-- начала/концы наложений
declare @b table( Date datetime primary key, n int identity unique );
insert @b( Date)
  select DateStart 
  from @t as t where exists( select * from @t as x where x.EmployeeID <> t.EmployeeID and t.DateStart between x.DateStart and x.DateEnd )
  union
  select DateEnd
    from @t as t where exists( select * from @t as x where x.EmployeeID <> t.EmployeeID and t.DateEnd between x.DateStart and x.DateEnd )
  order by DateStart
;
select * from @b;

-- интервалы перекрытий
with t as ( select d1 = b.Date, d2 = e.Date
                 , dT = datediff(minute, b.Date, e.Date) from @b as b inner join @b as e on e.n = b.n + 1 )
 select * from t
   where exists( select * from @t as x where dateadd( minute, datediff(minute, d1, d2), d1) between x.DateStart and x.DateEnd )
 ;

-- сумма интервалов перекрытий
with t as ( select d1 = b.Date, d2 = e.Date
                 , dT = datediff(minute, b.Date, e.Date) from @b as b inner join @b as e on e.n = b.n + 1 )
 select minutes = sum(dT) from t
   where exists( select * from @t as x where dateadd( minute, datediff(minute, d1, d2) / 2, d1) between x.DateStart and x.DateEnd )
 ;
...
Рейтинг: 0 / 0
посчитать кол-во часов в наложениях рабочего графика
    #39854953
ant_sol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aleks222,

спасибо !!
...
Рейтинг: 0 / 0
посчитать кол-во часов в наложениях рабочего графика
    #39854955
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ant_solaleks222,

спасибо !!
Ну... там, ваще то, дефект есть.
...
Рейтинг: 0 / 0
посчитать кол-во часов в наложениях рабочего графика
    #39945214
Фотография Focha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ant_sol
aleks222,

спасибо !!

и как устроился на работу?
...
Рейтинг: 0 / 0
посчитать кол-во часов в наложениях рабочего графика
    #39945334
nullin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Focha, временные таблицы там нафиг не нужны!
только сделай
Код: sql
1.
cross apply(values (1, DateStart), (-1, DateEnd)

так разу сам догадаешься!
...
Рейтинг: 0 / 0
посчитать кол-во часов в наложениях рабочего графика
    #39945554
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nullin
Focha, временные таблицы там нафиг не нужны!
только сделай
Код: sql
1.
cross apply(values (1, DateStart), (-1, DateEnd)

так разу сам догадаешься!


Наивняк.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / посчитать кол-во часов в наложениях рабочего графика
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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