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

Откуда:
Сообщений: 4
Надо написать вьюшку, в которую входят некоторые строки из основной таблицы, и дополнительный столбец, значение ячейки которой вычисляется разностью соотв. ячеек соседних строк из основной таблицы.
Нашел LEAD/LAG, но как понял ms sql server 2008 не знает про них :'(
13 фев 13, 14:29    [13920562]     Ответить | Цитировать Сообщить модератору
 Re: ms sql server 2008: как получить доступ к следущей записи по отношению к текущей  [new]
Добрый Э - Эх
Guest
0) row_number + Sefl join
1) cross apply + top 1
и ещё много-много способов...
13 фев 13, 14:42    [13920673]     Ответить | Цитировать Сообщить модератору
 Re: ms sql server 2008: как получить доступ к следущей записи по отношению к текущей  [new]
defragmentator
Member

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

а в чём проблема ?
a=b-c написать?
13 фев 13, 15:39    [13921171]     Ответить | Цитировать Сообщить модератору
 Re: ms sql server 2008: как получить доступ к следущей записи по отношению к текущей  [new]
tommytunec
Member

Откуда:
Сообщений: 4
defragmentator
tommytunec,

а в чём проблема ?
a=b-c написать?


не знаю скл.
b - это ладно текущая строка, а как получить доступ к с?
То есть имеем таблицу А, у нее одно поле Ид.
Как получить таблицу с одним столбцом Ид* в котором указаны айдишикни кратные семи из первого+следующий айдишник, след. за соотв. айдишником кратным семи =>
имеем запрос: select (Ид + x) as Ид* from A.
Как получить доступ к x?
Как сказать что этот х это тоже поле Ид только со следущей строки?
13 фев 13, 16:11    [13921413]     Ответить | Цитировать Сообщить модератору
 Re: ms sql server 2008: как получить доступ к следущей записи по отношению к текущей  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
Предложение LEAD (Transact-SQL)
13 фев 13, 16:18    [13921454]     Ответить | Цитировать Сообщить модератору
 Re: ms sql server 2008: как получить доступ к следущей записи по отношению к текущей  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
а, не заметил про 2008, извиняюсь
13 фев 13, 16:20    [13921474]     Ответить | Цитировать Сообщить модератору
 Re: ms sql server 2008: как получить доступ к следущей записи по отношению к текущей  [new]
defragmentator
Member

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

ну я тестовую твою задачку решать не буду, но подскажу тебе путь, по которому идти:

Вот, например, такой несложный select выводит только чётные строки из результата запроса:
WITH Table_Select
AS
(SELECT ROW_NUMBER() OVER(ORDER BY COL1) AS Rom_num, * FROM Table_1)
SELECT * FROM Table_Select WHERE Rom_num%2=0


Или вот так :
Вывод в одном запросе пар: (идентификатор чётной записи, идентификатор нечётной записи). Вывод идёт в порядке возрастания идентификаторов.
WITH Table_Select 
AS
(SELECT ROW_NUMBER() OVER(ORDER BY COL1) AS Rom_num, * FROM Table_1)
SELECT T1.COL1, T2.COL1 FROM Table_Select AS T1, Table_Select AS T2 WHERE T1.Rom_num%2=0 AND T2.Rom_num%2=1 AND T1.Rom_num-T2.Rom_num=1


Короче, идею ты понял. Используй WITH и алиасы.
13 фев 13, 16:24    [13921497]     Ответить | Цитировать Сообщить модератору
 Re: ms sql server 2008: как получить доступ к следущей записи по отношению к текущей  [new]
tommytunec
Member

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

Надо вычислить сколько времени устройство стояло на месте, все устрайвает, только вот курсор для Т1 не перемещается, то есть находит первую точку со скоростью ноль и все, Т2 же все делает правильно, находит все другие точки со скоростью не ноль.
Как сделать так чтоб Т1 перебирал все точки со скоростью 0?

WITH Table_Select
AS
(SELECT ROW_NUMBER() OVER(ORDER BY MESSAGE_DATE) AS Rom_num, * FROM GPS_POINTS)
SELECT TOP 53 T1.MESSAGE_DATE
, T2.MESSAGE_DATE
,DATEDIFF(MI, T1.MESSAGE_DATE, T2.MESSAGE_DATE)
FROM Table_Select AS T1, Table_Select AS T2 WHERE T1.SPEED = 0 AND T2.Rom_num > T1.Rom_num AND T2.SPEED > 0 AND T1.DEVICE_ID = 1
14 фев 13, 09:30    [13924146]     Ответить | Цитировать Сообщить модератору
 Re: ms sql server 2008: как получить доступ к следущей записи по отношению к текущей  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
Посмотрите 8248458, или вообще поиском
14 фев 13, 09:43    [13924199]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить