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

Откуда:
Сообщений: 110
Привет всем.

Есть такой вопрос, как отнять из одного значения другое, находящееся в другой строке и в другом столбце в одной таблице?
Таблица во вложении..

Необходимо из ячейки dtimeStop 3 строки вычесть dtimeStart 1 строки.

К сообщению приложен файл. Размер - 40Kb
27 апр 15, 16:25    [17570533]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо вычесть значения находящиеся в разных строках  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
не ясен принцип вашей сортировки записей
27 апр 15, 16:28    [17570572]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо вычесть значения находящиеся в разных строках  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
maksim.yugai, если задача - посчитать, когда какие то действия начались, а когда - закончились, наверное, можно взять просто min и max:

select datediff(ss, min(dtimeStart), max(dtimeStop 3))
from <sometable>
27 апр 15, 16:42    [17570727]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо вычесть значения находящиеся в разных строках  [new]
londinium
Member

Откуда: Киев
Сообщений: 1199
Ели я правильно понял, то что-то такое:
SELECT IDChain, MIN(StartDate)StartDate,MAX(StopDate)StopDate
FROM TABLEA GROUP BY IDChain
27 апр 15, 16:47    [17570774]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо вычесть значения находящиеся в разных строках  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
londinium
Ели я правильно понял, то что-то такое:
SELECT IDChain, MIN(StartDate)StartDate,MAX(StopDate)StopDate
FROM TABLEA GROUP BY IDChain


я вижу , например, что у ТС в первой строке дата старта не минимальная
27 апр 15, 16:53    [17570867]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо вычесть значения находящиеся в разных строках  [new]
londinium
Member

Откуда: Киев
Сообщений: 1199
автор
я вижу , например, что у ТС в первой строке дата старта не минимальная

предлагаю ждать автора вопроса.
27 апр 15, 16:57    [17570924]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо вычесть значения находящиеся в разных строках  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21249
maksim.yugai
в другой строке и в другом столбце в одной таблице?

Только связав две копии таблицы. Так, чтобы в итоговой "суммарной строке" нужные поля были в одной записи.
27 апр 15, 17:35    [17571239]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо вычесть значения находящиеся в разных строках  [new]
Добрый Э - Эх
Guest
maksim.yugai,

Доступ к другим строкам из текущей - через оконные фукуии lead, lag, last_value, first_value

Какой длинны могут быть цепочки? Разность всегда должна быть между последним и первым элементом цепочки или возможны другие варианты?
27 апр 15, 17:51    [17571373]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо вычесть значения находящиеся в разных строках  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21249
Добрый Э - Эх
Доступ к другим строкам из текущей - через оконные фукуии lead, lag, last_value, first_value
Кабы данные были в одном и том же поле - да. Но увы...
27 апр 15, 18:08    [17571466]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо вычесть значения находящиеся в разных строках  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21249
Хотя... и вправду можно
LAG(dtimeStop) - dtimeStop + dtimeStart 

но это уж совсем изврат.
27 апр 15, 18:10    [17571474]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо вычесть значения находящиеся в разных строках  [new]
maksim.yugai
Member

Откуда:
Сообщений: 110
Всем спасибо за отклики.

Задача - найти разницу в этом промежутке времени. Это таблица из БД АТС. Хранятся данные о звонках. Так вот, мне нужно для отчетности вычислить это время. Оно покажет время ожидания звонка без IVR, поскольку в БД нет этого значения, необходимо его вычислять самостоятельно.

На скрине показана тоже выборка из таблицы. На самом деле сама таблица большая, там много полей. Тут сортировка происходит по DateTimeStart (desc). И вычислять я буду тоже - указывая период времени.
Нет, MIN и MAX тут не подойдет.

Какие-то еще данные нужны?

Просматриваю функции lead, lag, last_value, first_value.
27 апр 15, 19:21    [17571817]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо вычесть значения находящиеся в разных строках  [new]
Добрый Э - Эх
Guest
maksim.yugai,

чем картинки постить, лучше приведи юзабильный репрезентативный набор тестовых данный и желаемый результат на них с небольшим словесным описанием алгоритма получения результата. уверен, желающих помочь будет сильно больше.
27 апр 15, 19:46    [17571965]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо вычесть значения находящиеся в разных строках  [new]
o-o
Guest
вроде ему надо время "пересечения" интервалов.
если на каждое idChain всего 2 строки и гарантированно пересекаются, то так:
declare @t table (dtStart datetime, dtStop datetime, idChain int);

insert into @t values 
('2015-04-27 14:13:14', '2015-04-27 14:13:39', 1),
('2015-04-27 14:13:02', '2015-04-27 14:13:26', 1);

select idChain, datediff(ss, MAX(dtStart), MIN(dtStop))
from @t
where idChain is not null
group by idChain

если строк на каждое idChain больше, + пересечение может быть, а может и не быть,
то версию сервера в студию + набор исходных интервалов с ответом,
и как уже написали, не картинкой, а кодом
27 апр 15, 22:10    [17572495]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо вычесть значения находящиеся в разных строках  [new]
maksim.yugai
Member

Откуда:
Сообщений: 110
Всем большое спасибо. Эта разница находится не из этих полей.
29 апр 15, 18:09    [17583061]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить