Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Александо Member Откуда: Сообщений: 7 |
Всем гуру привет! Помогите решить проблему...всю голову уже сломал. Есть несколько строк: http://shot.qip.ru/00c1O6-4G1CCNtwN/ (прошу прощения...но таблицей вставить не получается) Смысл заключается в том чтобы следующей строчке присвоить в поле ParentID айдишник(ID)предыдущей строчки. Первая строчка считается та...которая самая ранняя если отсортировать по дате. 4 дня уже ломаю голову.....ну не идет каменный цветок. Помогите. Заранее спасибо! |
26 авг 13, 17:19 [14756913] Ответить | Цитировать Сообщить модератору |
Мистер Хенки Member Откуда: канализация Сообщений: 6615 |
в зависимости от того что используете либо селф джойн с пронумерованным row_number() множеством, либо lag |
26 авг 13, 17:21 [14756927] Ответить | Цитировать Сообщить модератору |
Александо Member Откуда: Сообщений: 7 |
А можно пример скрипта? |
26 авг 13, 17:28 [14756980] Ответить | Цитировать Сообщить модератору |
Мистер Хенки Member Откуда: канализация Сообщений: 6615 |
Александо, здесь про lag |
26 авг 13, 17:42 [14757057] Ответить | Цитировать Сообщить модератору |
StarikNavy Member Откуда: Москва Сообщений: 2396 |
Александо, номер версии то хоть озвучьте |
26 авг 13, 17:52 [14757107] Ответить | Цитировать Сообщить модератору |
Cammomile Member Откуда: Сообщений: 1214 |
Александо, сервер какой? |
26 авг 13, 17:53 [14757113] Ответить | Цитировать Сообщить модератору |
Александо Member Откуда: Сообщений: 7 |
сервер SQL 2012. Помогите парни...горю((( |
26 авг 13, 20:13 [14757546] Ответить | Цитировать Сообщить модератору |
Гость333 Member Откуда: Сообщений: 3683 |
Вставьте в виде SQL-скрипта, как это показано в п.6 рекомендаций по оформлению сообщений |
||
27 авг 13, 09:18 [14758545] Ответить | Цитировать Сообщить модератору |
Александо Member Откуда: Сообщений: 7 |
Исходные данные:
В результате должно быть так:
Вся проблеме ещё заключается в том...что надо присваивать записи исходя из столбца Date. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
27 авг 13, 10:05 [14758819] Ответить | Цитировать Сообщить модератору |
Empirical Member Откуда: Сообщений: 99 |
Александо,insert into your_table select 'value1', 'value2', 'value3', etc..., id from your table where Date in (select max(Date) from your_table) |
27 авг 13, 14:45 [14760779] Ответить | Цитировать Сообщить модератору |
Minamoto Member Откуда: Москва Сообщений: 1162 |
Александо,
Набросал вариант, но без тестовой таблицы проверить не смогу, так что за правильность не ручаюсь: with cte as (select *, ROW_NUMBER() over (order by Date) as rn from your_table) update cte set ParentId = cte1.ID from cte left join cte cte1 on cte.rn = cte1.rn + 1 |
||
27 авг 13, 17:51 [14762372] Ответить | Цитировать Сообщить модератору |
Александо Member Откуда: Сообщений: 7 |
Спасибо парни. Заработало. |
29 авг 13, 11:04 [14769722] Ответить | Цитировать Сообщить модератору |
Между сообщениями интервал более 1 года. |
Борис А Member Откуда: Сообщений: 2 |
Набросал вариант, но без тестовой таблицы проверить не смогу, так что за правильность не ручаюсь:with cte as (select *, ROW_NUMBER() over (order by Date) as rn from your_table) update cte set ParentId = cte1.ID from cte left join cte cte1 on cte.rn = cte1.rn + 1[/quot] Спасибо! "with cte as" - дает широкие возможности по модификации внутри таблицы. Не сразу понял, что cte не является виртуальной таблицей, а изменяет данные в таблице. Тоже требовалось заполнить пустые ячейки значением из верхней ячейки. Код сработал замечательно, только подставил свое значение таблицы, ячеек (*) и сортировки. Ну и BEGIN - END добавил. )) |
26 авг 17, 14:55 [20751081] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47049 |
![]() |
||
26 авг 17, 16:21 [20751151] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47049 |
Борис А, В новых версиях сервера есть функции LAG()OVER() и LEAD()OVER(). Ухищрения с ROW_NUMBER()OVER() в этом случае не нужны. |
26 авг 17, 16:24 [20751153] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |