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

Откуда:
Сообщений: 27
День добрый!
Помогите, пожалуйста, с такой задачкой:

Есть даты d1 и d2, задающие временной интервал.
Есть периоды некачественной работы, скажем, счетчика.
Надо рассчитать количество часов вот этой самой некачественной работы в заданном интервале.

Заранее спасибо!
9 фев 12, 13:46    [12061924]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по подсчету часов  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
И чего не получается?
9 фев 12, 13:47    [12061942]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по подсчету часов  [new]
M_mouse
Member

Откуда:
Сообщений: 27
Собственно, посчитать часы:)
9 фев 12, 14:16    [12062264]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по подсчету часов  [new]
iljy
Member

Откуда:
Сообщений: 8711
M_mouse,

а как пробовали?
9 фев 12, 14:18    [12062280]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по подсчету часов  [new]
M_mouse
Member

Откуда:
Сообщений: 27
Конкретно, я рассматривала каждый вариант (типа T1>=d1 and T1<=d2 and T2>=d2), но скрипт получился длинный.есть более простое решение?
9 фев 12, 14:20    [12062300]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по подсчету часов  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
M_mouse
Собственно, посчитать часы:)
Часы подсчитываются путем определения разницы между d2 и d1 в часах и вычитания из нее суммы часов некачественной работы в этом интервале.
9 фев 12, 14:20    [12062301]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по подсчету часов  [new]
M_mouse
Member

Откуда:
Сообщений: 27
Так-не пойдет.
А если выходит за границы выбранного диапазона?
9 фев 12, 14:24    [12062348]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по подсчету часов  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
M_mouse
Так-не пойдет.
А если выходит за границы выбранного диапазона?
Вы не привели ни скриптов таблиц с данными, ни требуемого результата, а хотите получить ответ.
9 фев 12, 14:27    [12062386]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по подсчету часов  [new]
M_mouse
Member

Откуда:
Сообщений: 27
invm
M_mouse
Так-не пойдет.
А если выходит за границы выбранного диапазона?
Вы не привели ни скриптов таблиц с данными, ни требуемого результата, а хотите получить ответ.


Желаемый результат был указан наверху. Необходимо, дублирую, "рассчитать количество часов вот этой самой некачественной работы в заданном интервале"
9 фев 12, 14:32    [12062460]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по подсчету часов  [new]
Glory
Member

Откуда:
Сообщений: 104751
M_mouse
Желаемый результат был указан наверху. Необходимо, дублирую, "рассчитать количество часов вот этой самой некачественной работы в заданном интервале"

Это не результат. Это постановка задачи
Результат - это когда вы говорите, что вот для чисел X и Y мы должны получить число Z
9 фев 12, 14:36    [12062530]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по подсчету часов  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
M_mouse,
https://www.sql.ru/forum/actualthread.aspx?tid=127456
9 фев 12, 14:36    [12062533]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по подсчету часов  [new]
M_mouse
Member

Откуда:
Сообщений: 27
спасибо за разъяснение!

Есть вводимый пользователем период [d1 -d2]. Например, с "01.01.12"-"12.02.12"
Есть таблица A. В ней содержатся данные по счетчику: ИД счетчика, дата снятия показания, показание. Например:
1/31.12.11 13:00/1000(вышел за норму)
1/03.01.12 15:00/500(вошел в норму)
...

Надо: посчитать количество часов, которые счетчик был не в норме за указанную дату.
9 фев 12, 14:50    [12062739]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по подсчету часов  [new]
M_mouse
Member

Откуда:
Сообщений: 27
Что-то типо такого получилось...Есть вариант покороче??

Update dbo.T1
Set T='0'

Update dbo.T1
Set T=Т+convert (int, DATEPART (HOUR,T2-T1))
from dbo.T1
Where T1>=d1 and T1<=d2 and T2<=d2

update dbo.T1
set T=T+convert(int,DATEPART(HOUR,d2-T1))
from dbo.T1
where T1>=d1 and T1<=d2 and T2>=d2

update dbo.T1
set T=T+convert(int,DATEPART(HOUR, t2-d1))
from dbo.T1
where T1<=d1 and T2>=d1 and T2<=d2

update dbo.T1
set T=T+convert(int,DATEPART(HOUR,d2-d1))
from dbo.T1
where T1<=d1 and T2>=d1 and T2>=d2
9 фев 12, 14:57    [12062830]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по подсчету часов  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
Как-то так:
select
 sum(datediff(hour, t1.d, isnull(t2.d, @d2)))
from
 dbo.T t1 outer apply
 (select top (1) d from dbo.T where id = t1.id and d > t1.d and d <= @d2 and <Показания в норме> order by d desc) t2
where
 t1.d between @d1 and @d2 and
 <Показания не в норме>
9 фев 12, 15:46    [12063435]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по подсчету часов  [new]
M_mouse
Member

Откуда:
Сообщений: 27
invm,
Спасибо!!
9 фев 12, 17:51    [12064962]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить