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

Откуда:
Сообщений: 73
У меня есть таблица с полем CREATEDATE
В него периодически пишутся данные. И мне нужно в секундах высчитать время этого периода. Понимаю, что нужно юзать ROW_NUMBER и цыкл, но не могу понять как это корректно сделать.
пример:
select CREATEDATE from TotalClaims
where YEAR(CREATEDATE)=2016
group by CREATEDATE
order by CREATEDATE

чтобы в итоге получить на выходе
RNCREATEDATE seconds_definition
12017-05-17 09:17:05.570115
22017-05-17 09:15:10.697110
32017-05-17 09:13:20.427105
42017-05-17 09:11:35.743100
52017-05-17 09:09:15.110140
62017-05-17 09:07:35.810100
72017-05-17 09:05:30.737
17 май 17, 09:24    [20487970]     Ответить | Цитировать Сообщить модератору
 Re: Как высчитать разницу между датами?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Aleksey br,

DATEDIFF MAX - MIN
17 май 17, 09:28    [20487984]     Ответить | Цитировать Сообщить модератору
 Re: Как высчитать разницу между датами?  [new]
Добрый Э - Эх
Guest
Aleksey br,

[ lead | lag ] over(order by ...) использовать нужно, а не row_number с циклами
17 май 17, 09:29    [20487990]     Ответить | Цитировать Сообщить модератору
 Re: Как высчитать разницу между датами?  [new]
Добрый Э - Эх
Guest
[quot TaPaK]Aleksey br,

у него одно поле с датой-временем... и для поиска длительности интервала нужно отнимать значения из соседних строк в разрезе сортировки по полю с датой...
17 май 17, 09:31    [20488003]     Ответить | Цитировать Сообщить модератору
 Re: Как высчитать разницу между датами?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
а, разница между следующими... тем один в сутки наверное, либо нумеруйте и считайте, либо LEAD для 2012+
17 май 17, 09:32    [20488012]     Ответить | Цитировать Сообщить модератору
 Re: Как высчитать разницу между датами?  [new]
Aleksey br
Member

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

Да. Lead отлично подходит.
Спасибо.
17 май 17, 09:55    [20488155]     Ответить | Цитировать Сообщить модератору
 Re: Как высчитать разницу между датами?  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
Добрый Э - Эх
Aleksey br,

[ lead | lag ] over(order by ...) использовать нужно, а не row_number с циклами

Эх. Не у всех есть 2012
DECLARE @tbl TABLE (
  [timestamp] DATETIME )
;
INSERT
INTO
  @tbl
VALUES
 ( '2017-05-17T09:17:05.570' ),
 ( '2017-05-17T09:15:10.697' ),
 ( '2017-05-17T09:13:20.427' ),
 ( '2017-05-17T09:11:35.743' ),
 ( '2017-05-17T09:09:15.110' ),
 ( '2017-05-17T09:07:35.810' ),
 ( '2017-05-17T09:05:30.737' )
;
/*2008*/
WITH
t AS (
  SELECT
    [timestamp],
    [rn] = ROW_NUMBER() OVER ( ORDER BY [timestamp] )
  FROM
    @tbl
)
SELECT
  tn.[timestamp],
  [sec] = CONVERT( INT, 5 * ROUND( DATEDIFF( ms, tp.[timestamp], tn.[timestamp] ) / 5000.0, 0 ) )
FROM
  t tn
  LEFT JOIN t tp ON (
        tp.[rn] = tn.[rn] - 1 )
;
17 май 17, 10:02    [20488188]     Ответить | Цитировать Сообщить модератору
 Re: Как высчитать разницу между датами?  [new]
Добрый Э - Эх
Guest
Руслан Дамирович
Эх. Не у всех есть 2012
на 2008-м можно замутить через max() over(... rows between unbounded preceding and 1 preceding).
17 май 17, 10:11    [20488239]     Ответить | Цитировать Сообщить модератору
 Re: Как высчитать разницу между датами?  [new]
Добрый Э - Эх
Guest
Добрый Э - Эх
Руслан Дамирович
Эх. Не у всех есть 2012
на 2008-м можно замутить через max() over(... rows between unbounded preceding and 1 preceding).
или оно тоже только с 2012 появилось?
17 май 17, 10:15    [20488265]     Ответить | Цитировать Сообщить модератору
 Re: Как высчитать разницу между датами?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Добрый Э - Эх
Добрый Э - Эх
пропущено...
на 2008-м можно замутить через max() over(... rows between unbounded preceding and 1 preceding).
или оно тоже только с 2012 появилось?
ага
17 май 17, 10:25    [20488349]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить