Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
tommytunec Member Откуда: Сообщений: 4 |
Надо написать вьюшку, в которую входят некоторые строки из основной таблицы, и дополнительный столбец, значение ячейки которой вычисляется разностью соотв. ячеек соседних строк из основной таблицы. Нашел LEAD/LAG, но как понял ms sql server 2008 не знает про них :'( |
13 фев 13, 14:29 [13920562] Ответить | Цитировать Сообщить модератору |
Добрый Э - Эх
Guest |
0) row_number + Sefl join 1) cross apply + top 1 и ещё много-много способов... |
13 фев 13, 14:42 [13920673] Ответить | Цитировать Сообщить модератору |
defragmentator Member Откуда: Сообщений: 20504 |
tommytunec, а в чём проблема ? a=b-c написать? |
13 фев 13, 15:39 [13921171] Ответить | Цитировать Сообщить модератору |
tommytunec Member Откуда: Сообщений: 4 |
не знаю скл. b - это ладно текущая строка, а как получить доступ к с? То есть имеем таблицу А, у нее одно поле Ид. Как получить таблицу с одним столбцом Ид* в котором указаны айдишикни кратные семи из первого+следующий айдишник, след. за соотв. айдишником кратным семи => имеем запрос: select (Ид + x) as Ид* from A. Как получить доступ к x? Как сказать что этот х это тоже поле Ид только со следущей строки? |
||
13 фев 13, 16:11 [13921413] Ответить | Цитировать Сообщить модератору |
Cygapb-007 Member Откуда: Сообщений: 1677 |
Предложение LEAD (Transact-SQL) |
13 фев 13, 16:18 [13921454] Ответить | Цитировать Сообщить модератору |
Cygapb-007 Member Откуда: Сообщений: 1677 |
а, не заметил про 2008, извиняюсь |
13 фев 13, 16:20 [13921474] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
Cygapb-007 Member Откуда: Сообщений: 1677 |
Посмотрите 8248458, или вообще поиском |
14 фев 13, 09:43 [13924199] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |