Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как подсчитать время в полях Time?  [new]
VictorDnepr
Member

Откуда:
Сообщений: 17
В таблице есть поле начало и окончания времени работы. На один день может быть несколько записей. Нужно подсчитать время за сколько человек работал в указанном периоде.
Я пока только рассматриваю вариант, через массивы в С++ и множество запросов к СУБД MS SQL.
3 янв 17, 18:31    [20071218]     Ответить | Цитировать Сообщить модератору
 Re: Как подсчитать время в полях Time?  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
Флудер?
3 янв 17, 18:33    [20071225]     Ответить | Цитировать Сообщить модератору
 Re: Как подсчитать время в полях Time?  [new]
o-o
Guest
VictorDnepr
за сколько человек работал в указанном периоде.

1. за сколько это тип money
2. в периоде бывают цифры у числа
3 янв 17, 18:43    [20071253]     Ответить | Цитировать Сообщить модератору
 Re: Как подсчитать время в полях Time?  [new]
VictorDnepr
Member

Откуда:
Сообщений: 17
Knyazev Alexey
Флудер?


Мне ответили на тот вопрос теперь другой вопрос. При чём тут флуд?
3 янв 17, 20:06    [20071470]     Ответить | Цитировать Сообщить модератору
 Re: Как подсчитать время в полях Time?  [new]
Relic Hunter
Member

Откуда: AB
Сообщений: 7599
VictorDnepr,

with a as (
select 1 id, '2017-01-02 8:01' start,  '2017-01-02 9:01' stop
union all
select 1, '2017-01-02 10:16',  '2017-01-02 11:16'
union all
select 1, '2017-01-02 12:16',  '2017-01-02 13:18'
) 
select  
  sum(datepart(day, convert(datetime, stop) - convert(datetime, start)) - 1), 
  sum(datepart(hour, convert(datetime, stop) - convert(datetime, start))),
  sum(datepart(minute, convert(datetime, stop) - convert(datetime, start)))
from a
group by id

                        
----------- ----------- -----------
0           3           2

(1 row(s) affected)
3 янв 17, 20:28    [20071499]     Ответить | Цитировать Сообщить модератору
 Re: Как подсчитать время в полях Time?  [new]
Makar4ik
Member

Откуда: Когда-то были Лужки, а теперь Бордюр-Сити.
Сообщений: 2680
Relic Hunter
VictorDnepr,

with a as (
select 1 id, '2017-01-02 8:01' start,  '2017-01-02 9:01' stop
union all
select 1, '2017-01-02 10:16',  '2017-01-02 11:16'
union all
select 1, '2017-01-02 12:16',  '2017-01-02 13:18'
) 
select  
  sum(datepart(day, convert(datetime, stop) - convert(datetime, start)) - 1), 
  sum(datepart(hour, convert(datetime, stop) - convert(datetime, start))),
  sum(datepart(minute, convert(datetime, stop) - convert(datetime, start)))
from a
group by id

                        
----------- ----------- -----------
0           3           2

(1 row(s) affected)


Как-то громоздко и не радует. Как китайские шарики.
Но с Group by - это да, это пожалуй, находка века. Никто и не подозревал...

...Короче.
есть время старта и финиша. ЕСЛИ они не накладываются друг на друга, то datediff в секундах, между стартом и минимальным финишем, который не раньше старта (where not exists)

Если же накладываются, то должно быть ID сессии.
Если нет ID сессии, то база спроектирована криво.
5 янв 17, 04:52    [20074330]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить