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

Откуда:
Сообщений: 4
Такой вопрос: Есть таблица #t и поле дат dt. Нужно найти разницу между последующей и текущей записью и выразить в минутах. На форуме нашел вариант решения, но он не работает для одинаковых полей.

Код:
+


create table #t (dt datetime)
insert into #t
select '20100101 12:22' union all
select '20100101 12:22' union all
select '20100101 12:23' union all
select '20100101 12:40' union all
select '20100101 15:03'

select t1.dt, t2.dt, DATEDIFF(minute, t1.dt, t2.dt)
from #t t1
left join #t t2 on t2.dt = (SELECT MIN(dt) from #t where dt > t1.dt)
order by t1.dt


drop table #t



Результат:
+

dt dt (No column name)
2010-01-01 12:22:00.000 2010-01-01 12:23:00.000 1
2010-01-01 12:22:00.000 2010-01-01 12:23:00.000 1
2010-01-01 12:23:00.000 2010-01-01 12:40:00.000 17
2010-01-01 12:40:00.000 2010-01-01 15:03:00.000 143
2010-01-01 15:03:00.000 NULL NULL



Должно быть:
+

dt dt (No column name)
2010-01-01 12:22:00.000 2010-01-01 12:22:00.000 0
2010-01-01 12:22:00.000 2010-01-01 12:23:00.000 1
2010-01-01 12:23:00.000 2010-01-01 12:40:00.000 17
2010-01-01 12:40:00.000 2010-01-01 15:03:00.000 143
2010-01-01 15:03:00.000 NULL NULL

29 июн 12, 16:26    [12795812]     Ответить | Цитировать Сообщить модератору
 Re: Разница между последующей и текущей записью  [new]
Alexandr Kr.
Member

Откуда: Украина, Харьков
Сообщений: 165
Alexander Serbinovskiy,

create table #t (dt datetime)
insert into #t
select '20100101 12:22' union all
select '20100101 12:22' union all
select '20100101 12:23' union all
select '20100101 12:40' union all
select '20100101 15:03' 

;with cte as
(select *,ROW_NUMBER() over(order by dt) as ord from #t)

select t1.dt, t2.dt, DATEDIFF(minute, t1.dt, t2.dt)
from cte t1
left join cte t2 on t2.ord-1 = t1.ord
order by t1.dt


drop table #t
29 июн 12, 16:31    [12795852]     Ответить | Цитировать Сообщить модератору
 Re: Разница между последующей и текущей записью  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37069
Без ключа в таблице вашу задачу придется решать курсором. Ну или генерировать этот ключ налету (к примеру, через нумерацию записей).
29 июн 12, 16:32    [12795864]     Ответить | Цитировать Сообщить модератору
 Re: Разница между последующей и текущей записью  [new]
Alexander Serbinovskiy
Member

Откуда:
Сообщений: 4
А можно пару комментариев, что было не так и что Вы добавили. Я еще новичок в SQL и хотелось бы разобраться
29 июн 12, 16:33    [12795876]     Ответить | Цитировать Сообщить модератору
 Re: Разница между последующей и текущей записью  [new]
Alexander Serbinovskiy
Member

Откуда:
Сообщений: 4
Гавриленко Сергей Алексеевич,

Ключ есть, но разве могут быть в ключе одинаковые записи? Да и ключ зашифрован, т.е. алгебраические операции с ним выполнять не удобно.
29 июн 12, 16:36    [12795898]     Ответить | Цитировать Сообщить модератору
 Re: Разница между последующей и текущей записью  [new]
Glory
Member

Откуда:
Сообщений: 104760
Alexander Serbinovskiy
Ключ есть, но разве могут быть в ключе одинаковые записи?

У вас нет ключа. В этом и проблема.
29 июн 12, 16:38    [12795914]     Ответить | Цитировать Сообщить модератору
 Re: Разница между последующей и текущей записью  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37069
Alexander Serbinovskiy
Гавриленко Сергей Алексеевич,

Ключ есть, но разве могут быть в ключе одинаковые записи? Да и ключ зашифрован, т.е. алгебраические операции с ним выполнять не удобно.
В вашей приведенной таблице ключа нет.
29 июн 12, 16:38    [12795917]     Ответить | Цитировать Сообщить модератору
 Re: Разница между последующей и текущей записью  [new]
Alexander Serbinovskiy
Member

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

Большое спасибо, все работает, ток я ничего не понял:)
29 июн 12, 16:52    [12796031]     Ответить | Цитировать Сообщить модератору
 Re: Разница между последующей и текущей записью  [new]
Alexandr Kr.
Member

Откуда: Украина, Харьков
Сообщений: 165
Alexander Serbinovskiy
Alexandr Kr.,

Большое спасибо, все работает, ток я ничего не понял:)


Не поняли что?
Все, что использовано в скрипте, описано в доке.
Так что, как говорится, RTFM.
29 июн 12, 17:15    [12796176]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить