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

Откуда:
Сообщений: 4
Всем привет, имеется столбец c дата/время, требуется создать столбец с разницей между значениями текущей и предыдущей строки в минутах.
Я понял что это нужно сделать через DATEDIFF но так и не решил.
Просьба помочь.
1 апр 14, 15:05    [15816335]     Ответить | Цитировать Сообщить модератору
 Re: Вернуть разницу в минутах  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4279
Pantomim
Всем привет, имеется столбец c дата/время, требуется создать столбец с разницей между значениями текущей и предыдущей строки в минутах.
Я понял что это нужно сделать через DATEDIFF но так и не решил.
Просьба помочь.

Не решились написать скрипт и ввести несколько команд?
Откуда такая скромность?
Или проблемы с текущей и предыдущей строкам?
1 апр 14, 15:11    [15816379]     Ответить | Цитировать Сообщить модератору
 Re: Вернуть разницу в минутах  [new]
Glory
Member

Откуда:
Сообщений: 104760
Pantomim
Я понял что это нужно сделать через DATEDIFF но так и не решил.

Для начала напишите select, в котором будут два значения "текущей и предыдущей строки"
1 апр 14, 15:11    [15816383]     Ответить | Цитировать Сообщить модератору
 Re: Вернуть разницу в минутах  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4279
У строк в таблице есть уникальный идентификатор?
1 апр 14, 15:27    [15816544]     Ответить | Цитировать Сообщить модератору
 Re: Вернуть разницу в минутах  [new]
Pantomim
Member

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

Я недавно начал изучать SQL, нет уникального идентификатора нет.
Пытался получить через ROW_NUMBER.

SELECT ROW_NUMBER() OVER(ORDER BY t1.date) as num1,
ROW_NUMBER+1() OVER(ORDER BY t1.date) as num2,
DELAY=(SELECT DATEDIFF(MINUTE,t1.date,t2.date))
FROM TAB=t1,TAB=t2
WHERE ?

Я новичек и еще плохо знаю синтаксис, и не знаю как приравнять данные ROW_NUMBER, т.к. WHERE обрабатывается раньше SELECT
1 апр 14, 15:52    [15816749]     Ответить | Цитировать Сообщить модератору
 Re: Вернуть разницу в минутах  [new]
Glory
Member

Откуда:
Сообщений: 104760
Pantomim
Пытался получить через ROW_NUMBER.

ROW_NUMBER не может для одной записи вренуть значения другой записи

А как вам получить "значения текущей и предыдущей строк " вам уже показали в предыдущей теме
1 апр 14, 15:55    [15816783]     Ответить | Цитировать Сообщить модератору
 Re: Вернуть разницу в минутах  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4279
Pantomim


ROW_NUMBER+1()


Это бесподобно!!!
1 апр 14, 15:56    [15816802]     Ответить | Цитировать Сообщить модератору
 Re: Вернуть разницу в минутах  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4279
Как-то так...

SELECT DATEDIFF(mi,[предыдущее_время],[текущее_время]) [разница_в_минутах]
FROM (
SELECT (SELECT MAX(t1.date) FROM TAB t1 WHERE  t1.date < T.date) [предыдущее_время],
T.date [текущее_время]
FROM TAB T ) TT
1 апр 14, 16:03    [15816875]     Ответить | Цитировать Сообщить модератору
 Re: Вернуть разницу в минутах  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4279
SELECT 
   [предыдущее_время],
   [текущее_время],
   DATEDIFF(mi,[предыдущее_время],[текущее_время]) [разница_в_минутах]
FROM (
SELECT (SELECT MAX(t1.date) FROM TAB t1 WHERE  t1.date < T.date) [предыдущее_время],
T.date [текущее_время]
FROM TAB T ) TT
1 апр 14, 16:05    [15816889]     Ответить | Цитировать Сообщить модератору
 Re: Вернуть разницу в минутах  [new]
prog882
Guest
Pantomim,
declare @t table (id int identity, dt datetime);
insert into @t values ('20140402 07:00:00.000'),('20140402 08:33:00.000'),('20140402 08:33:00.000');
  with 
 t1 as (
select /*id,*/ row_number() over (order by dt) as id, dt 
  from @t ),
 t2 as ( 
select t1.dt as dt1, isnull(t2.dt,getdate()) as dt2
  from t1 t1
  left join t1 t2 on t1.id + 1 = t2.id )
select *, datediff(mi,dt1,dt2) as [minute] from t2
2 апр 14, 08:49    [15819473]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить