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

Откуда:
Сообщений: 625
есть таблица
value 
2
4
6
8
10

нужно сделать такой запрос, чтобы получить

value 
2
3
5
7
9

Вторая таблица получается вычислением: первая строка такая же как в первой таблице, а следующие - (предыдущая + текущая) / 2
25 окт 12, 12:25    [13373525]     Ответить | Цитировать Сообщить модератору
 Re: Составить текст запроса  [new]
Ozerov
Member

Откуда: Москва
Сообщений: 3637
А как Вы определяете, где первая строка, а где вторая :)
25 окт 12, 12:26    [13373538]     Ответить | Цитировать Сообщить модератору
 Re: Составить текст запроса  [new]
abort
Member

Откуда:
Сообщений: 625
кроме столбца value есть еще столбец period. Т.е. будет так:
period  value
1         2
2         4
3         6
4         8
5         10

Сортировка делается по полю period
25 окт 12, 12:32    [13373592]     Ответить | Цитировать Сообщить модератору
 Re: Составить текст запроса  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
abort,

для ms sql 2005
DECLARE @tab TABLE (id int)
INSERT INTO @tab ( id ) VALUES  (2)
INSERT INTO @tab ( id ) VALUES  (4)
INSERT INTO @tab ( id ) VALUES  (6)
INSERT INTO @tab ( id ) VALUES  (8)
INSERT INTO @tab ( id ) VALUES  (10)

SELECT 
    t1.id,
    t2.id,
    ISNULL((t1.id +t2.id)/2, t1.id) AS ss
FROM
(
SELECT 
    ROW_NUMBER() OVER (ORDER BY id) cn
    ,ID
FROM @tab
) AS T1
LEFT JOIN 
(
SELECT 
    ROW_NUMBER() OVER (ORDER BY id) cn
    ,ID
FROM @tab
) AS T2
ON T1.cn =t2.cn+1
25 окт 12, 12:34    [13373608]     Ответить | Цитировать Сообщить модератору
 Re: Составить текст запроса  [new]
abort
Member

Откуда:
Сообщений: 625
в оракле это делается с помощью LAG, а в MS SQL эта функция родится только в SQL SERVER 2012
25 окт 12, 12:35    [13373615]     Ответить | Цитировать Сообщить модератору
 Re: Составить текст запроса  [new]
iap
Member

Откуда: Москва
Сообщений: 47086
abort
в оракле это делается с помощью LAG, а в MS SQL эта функция родится только в SQL SERVER 2012
Не "родится", а родилась!
25 окт 12, 12:37    [13373633]     Ответить | Цитировать Сообщить модератору
 Re: Составить текст запроса  [new]
abort
Member

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

спасибо за код, не очень лаконично, как в оракле, но главное работает
25 окт 12, 12:40    [13373647]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить