Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Хитрый запрос  [new]
Vadim X
Guest
Есть таблица Table с полями DATE,ID,DIFF

Примерные данные
DATE           ID      DIFF

01/01/04 1 NULL
01/01/04 2 NULL
03/01/04 1 NULL
07/01/04 1 NULL
11/01/04 1 NULL
12/01/04 2 NULL
13/01/04 1 NULL
14/01/04 1 NULL

Надо вычислить поле DIFF как разницу ДАТ у предедущей записи с таким же ID
т.е. должно получиться следующее:

01/01/04       1      NULL (или 0, все равно)
01/01/04 2 NULL (или 0, все равно)
03/01/04 1 2
07/01/04 1 4
11/01/04 1 4
12/01/04 2 11
13/01/04 1 2
14/01/04 1 1

Как это получить одним запросом?
22 июн 04, 14:40    [757436]     Ответить | Цитировать Сообщить модератору
 Re: Хитрый запрос  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37100
https://www.sql.ru/forum/actualthread.aspx?bid=1&tid=99925&hl=%ec%e5%e6%f1%f2%f0%ee%f7%ed%fb%e5+%e2%fb%f7%e8%f1%eb%e5%ed%e8%ff
22 июн 04, 14:46    [757467]     Ответить | Цитировать Сообщить модератору
 Re: Хитрый запрос  [new]
paparome
Member

Откуда: Москва
Сообщений: 4312
create table #t (id int, date datetime, diff int)
insert into #t
select 1, '20040101', null
union all
select 2, '20040102', null
union all
select 1, '20040103', null
union all
select 1, '20040107', null
union all
select 2, '20040110', null

update #t
set diff = x1.diff
from #t inner join
( 
select t2.id, t2.date, datediff(dd, max(t1.date), t2.date) as diff
from #t t1 inner join #t t2
on t1.id = t2.id and t1.date < t2.date
group by t2.id, t2.date) x1
on #t.id = x1.id and #t.date = x1.date

select * from #t

drop table #t

?
22 июн 04, 14:51    [757491]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить