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


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

где DateStart - дата и время начала работы в графике,
DateEnd - дата и время окончания работы в графике
...
Рейтинг: 0 / 0
28.08.2019, 13:23
    #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
29.08.2019, 09:17
    #39854953
ant_sol
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
посчитать кол-во часов в наложениях рабочего графика
aleks222,

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

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

спасибо !!

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

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

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


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


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