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

Откуда:
Сообщений: 4
Доброго времени суток!

Есть таблица со следующими данными

Дата | CLOSE
03/01/12 | 1
03/02/12 | 2
03/03/12 | 3
03/04/12 | 5
03/05/12 | 7
03/06/12 | 6
03/07/12 | 7
03/08/12 | 8
...

Необходимо сформировать SQL запрос возвращающий следующие данные

Дата | CLOSE | Delta | Delta_s
03/02/12 | 2 | 2 - 1 = 1 | (2-1)/1 = 1
03/03/12 | 3 | 3 - 2 = 1 | (3-2)/2 = 0.5
03/04/12 | 5 | 5 - 3 = 2 | (5-3)/3 = 0.66...
03/05/12 | 7 | 7 - 5 = 2 | (7-5)/5 = 0.4
03/06/12 | 6 | 6 - 7 =-1 | (6-7)/7 =-0,14
03/07/12 | 7 | 7 - 6 = 1 | (7-6)/6 = 0.166...
03/08/12 | 8 | 8 - 7 = 1 | (8-7)/7 = 0.125
...

Где поля Delta и Delta_s являются расчитываемыми
Delta = Close_текущее - Close_за предыдущий месяц
Delta_s = (Close_текущее - Close_за предыдущий месяц)/Close_за предыдущий месяц

Заранее спасибо!
22 авг 12, 16:11    [13050366]     Ответить | Цитировать Сообщить модератору
 Re: SQL запросом  [new]
AmKad
Member

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

Версия какая?
22 авг 12, 16:45    [13050669]     Ответить | Цитировать Сообщить модератору
 Re: SQL запросом  [new]
aleks2
Guest
;with
numbered as (select *, ROW_NUMBER() over(order by Дата ASC)) n from [Есть таблица со следующими данными]_

select n2.*, n2.CLOSE-n1.CLOSE Delta, (n2.CLOSE-n1.CLOSE)/n1.CLOSE Delta_s
from numbered n2 inner join numbered n1 on n2.n-1=n1.n
22 авг 12, 16:48    [13050686]     Ответить | Цитировать Сообщить модератору
 Re: SQL запросом  [new]
azor
Member

Откуда:
Сообщений: 4
aleks2, Спасибо за помощь.

;With numbered([TICKER],[PER],[DATE],[CLOSE],[VOL],n) As 
(
	SELECT 
		[TICKER],
		[PER],
		[DATE],
		[CLOSE],
		[VOL],
		ROW_NUMBER() over(order by [TICKER] ASC) n 
  FROM [Practika2012].[dbo].[tblMMB]
  Where substring([DATE], 1,3) Like '03/%'
)

Select	
		n2.n,
		n2.[TICKER],
		n2.[PER],
		n2.[DATE],
		n2.[VOL],
		cast(n2.[CLOSE] As real) as [CLOSE], -- Текущее значение
		cast(n1.[CLOSE] As real) as [CLOSE_PRIVIOUS], -- Значение предыдущего периода
		cast(n2.[CLOSE] As real) - cast(n1.[CLOSE] As real) As Delta,
		(cast(n2.[CLOSE] As real) - cast(n1.[CLOSE] As real))/cast(n1.[CLOSE] As real) As Delta_s
	From numbered n2  inner join numbered n1 on n2.n-1=n1.n
23 авг 12, 10:29    [13053393]     Ответить | Цитировать Сообщить модератору
 Re: SQL запросом  [new]
iap
Member

Откуда: Москва
Сообщений: 47198
azor
Where substring([DATE], 1,3) Like '03/%'
Это что за говнокод??
[DATE] - типа DATE?
23 авг 12, 10:32    [13053419]     Ответить | Цитировать Сообщить модератору
 Re: SQL запросом  [new]
AmKad
Member

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

MS SQL 2012: lag
23 авг 12, 13:17    [13054947]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить