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

Откуда:
Сообщений: 88
Здраствуйте.
Есть таблица сигналов:

idsdt
122014-04-09 11:29:01.000
222014-04-09 11:29:01.000
322014-04-09 11:29:02.000
422014-04-09 11:29:02.000
522014-04-09 11:29:02.000
6202014-04-09 15:16:59.000
7202014-04-09 15:17:53.000
8202014-04-09 15:17:59.000
5557202014-04-11 09:00:12.000
5558202014-04-11 09:00:30.000
5559202014-04-11 09:00:36.000
5560202014-04-11 09:00:53.000
5561202014-04-11 09:00:59.000
5562202014-04-11 09:01:19.000
5563202014-04-11 09:01:25.000
5564202014-04-11 09:01:42.000


Необходимо сделать выборку:
idsdtid1s1dt1dt1-dt
122014-04-09 11:29:01.000222014-04-09 11:29:01.000~
222014-04-09 11:29:01.000322014-04-09 11:29:02.000~
322014-04-09 11:29:02.000422014-04-09 11:29:02.000~
422014-04-09 11:29:02.000522014-04-09 11:29:02.000~
522014-04-09 11:29:02.0006202014-04-09 15:16:59.000~
6202014-04-09 15:16:59.0007202014-04-09 15:17:53.000~
7202014-04-09 15:17:53.0008202014-04-09 15:17:59.000~
8202014-04-09 15:17:59.0005557202014-04-11 09:00:12.000~
5557202014-04-11 09:00:12.0005558202014-04-11 09:00:30.000~
5558202014-04-11 09:00:30.0005559202014-04-11 09:00:36.000~
5559202014-04-11 09:00:36.0005560202014-04-11 09:00:53.000~
5560202014-04-11 09:00:53.0005561202014-04-11 09:00:59.000~
5561202014-04-11 09:00:59.0005562202014-04-11 09:01:19.000~
5562202014-04-11 09:01:19.0005563202014-04-11 09:01:25.000~
5563202014-04-11 09:01:25.0005564202014-04-11 09:01:42.000~
5564202014-04-11 09:01:42.000~

(Тоесть, соединить с рядом на один уровень ниже)
Помогите, будьте добры.
22 апр 14, 13:26    [15915658]     Ответить | Цитировать Сообщить модератору
 Re: Помогите сделать запрос?  [new]
Добрый Э - Эх
Guest
lead/lag если версия сервера позволяет. TOP 1 (хоть в прямом виде в селект-листе, хоть через APPLY) в противном случае.
Ещё как вариант - перенумеровать через row_number и заджойнить по условию rn - rn +1
22 апр 14, 13:28    [15915680]     Ответить | Цитировать Сообщить модератору
 Re: Помогите сделать запрос?  [new]
linav
Guest
может не совсем верно, но посмотрите:
create table #t (
	id int,
	s int,
	dt datetime)

insert into #t (id, s, dt)
select 1,2,'2014-04-09 11:29:01.000' union all
select 2,2,'2014-04-09 11:29:01.000' union all
select 3,2,'2014-04-09 11:29:02.000' union all
select 4,2,'2014-04-09 11:29:02.000' union all
select 5,2,'2014-04-09 11:29:02.000' union all
select 6,20,'2014-04-09 15:16:59.000' union all
select 7,20,'2014-04-09 15:17:53.000' union all
select 8,20,'2014-04-09 15:17:59.000' union all
select 5557,20,'2014-04-11 09:00:12.000' union all
select 5558,20,'2014-04-11 09:00:30.000' union all
select 5559,20,'2014-04-11 09:00:36.000' union all
select 5560,20,'2014-04-11 09:00:53.000' union all
select 5561,20,'2014-04-11 09:00:59.000' union all
select 5562,20,'2014-04-11 09:01:19.000' union all
select 5563,20,'2014-04-11 09:01:25.000' union all
select 5564,20,'2014-04-11 09:01:42.000'

select 
		t1.id id1, 
		t1.s s1, 
		t1.dt dt1,
		t2.id id2,
		t2.s s2,
		t2.dt dt2,
		datediff(ss, t1.dt, t2.dt) 
	from 
		(select row_number() over (order by id) nm1, id, s, dt from #t) t1 
		inner join 
		(select row_number() over (order by id) nm2, id, s, dt from #t) t2
		on t1.nm1 = t2.nm2-1

drop table #t
22 апр 14, 14:03    [15915945]     Ответить | Цитировать Сообщить модератору
 Re: Помогите сделать запрос?  [new]
linav
Guest
ой, только немного неправильно сделала, нужно было left join
22 апр 14, 14:11    [15916008]     Ответить | Цитировать Сообщить модератору
 Re: Помогите сделать запрос?  [new]
SNenko
Member

Откуда:
Сообщений: 88
linav,
Благодарю!

select 
		t1.id id1, 
		t1.s s1, 
		t1.dt dt1,
		t2.id id2,
		t2.s s2,
		t2.dt dt2,
		datediff(ss, t1.dt, t2.dt) 
	from 
		(select row_number() over (order by id) nm1, id, s, dt from #t) t1 
		inner join 
		(select row_number() over (order by id) nm2, id, s, dt from #t) t2
		on t1.nm1 = t2.nm2-1


Самое то!))
Еще раз, спасибо!
22 апр 14, 14:19    [15916068]     Ответить | Цитировать Сообщить модератору
 Re: Помогите сделать запрос?  [new]
SNenko
Member

Откуда:
Сообщений: 88
linav,
Тут главное, крнцепция))
Очень меня выручили..!
22 апр 14, 14:24    [15916123]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить