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

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

Помогите решить проблему...всю голову уже сломал.
Есть несколько строк:
http://shot.qip.ru/00c1O6-4G1CCNtwN/
(прошу прощения...но таблицей вставить не получается)
Смысл заключается в том чтобы следующей строчке присвоить в поле ParentID айдишник(ID)предыдущей строчки.
Первая строчка считается та...которая самая ранняя если отсортировать по дате.

4 дня уже ломаю голову.....ну не идет каменный цветок.

Помогите. Заранее спасибо!
26 авг 13, 17:19    [14756913]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить строке предыдущее значение.  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
в зависимости от того что используете либо селф джойн с пронумерованным row_number() множеством, либо lag
26 авг 13, 17:21    [14756927]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить строке предыдущее значение.  [new]
Александо
Member

Откуда:
Сообщений: 7
А можно пример скрипта?
26 авг 13, 17:28    [14756980]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить строке предыдущее значение.  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
Александо,

здесь про lag
26 авг 13, 17:42    [14757057]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить строке предыдущее значение.  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2394
Александо,

номер версии то хоть озвучьте
26 авг 13, 17:52    [14757107]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить строке предыдущее значение.  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Александо, сервер какой?
26 авг 13, 17:53    [14757113]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить строке предыдущее значение.  [new]
Александо
Member

Откуда:
Сообщений: 7
сервер SQL 2012.
Помогите парни...горю(((
26 авг 13, 20:13    [14757546]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить строке предыдущее значение.  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Александо
(прошу прощения...но таблицей вставить не получается)

Вставьте в виде SQL-скрипта, как это показано в п.6 рекомендаций по оформлению сообщений
27 авг 13, 09:18    [14758545]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить строке предыдущее значение.  [new]
Александо
Member

Откуда:
Сообщений: 7
Исходные данные:

12345678910111213
IdOfferIdStateIdDateWorkerAuthorAuthorNameLegacyOfferIdFinesDebtSumSettelmentPaymentDebtCountParentId
E6AC39F7-37EB-4920-9C28-4020A852D32FNULL12013-06-11 17:18:28.573NULLprocedureprocedure26727000000NULL
7CEBBA35-1431-448B-A22A-5199C86F51EBNULL32013-05-28 13:35:00.000NFIN\neizvestnih_astored procedurestored procedure2672NULLNULLNULLNULLNULL
8262631E-D8AB-4533-BA7B-563FE6D65D0CNULL12013-05-21 16:00:00.0002835stored procedurestored procedure2672NULLNULLNULLNULLNULL
094906D8-F86D-4921-B39F-ED2BD24B2E57NULL12013-06-04 17:46:38.710NULLprocedureprocedure2672NULLNULLNULLNULLNULL


В результате должно быть так:

12345678910111213
IdOfferIdStateIdDateWorkerAuthorAuthorNameLegacyOfferIdFinesDebtSumSettelmentPaymentDebtCountParentId
E6AC39F7-37EB-4920-9C28-4020A852D32FNULL12013-06-11 17:18:28.573NULLprocedureprocedure26727000000094906D8-F86D-4921-B39F-ED2BD24B2E57
7CEBBA35-1431-448B-A22A-5199C86F51EBNULL32013-05-28 13:35:00.000NFIN\neizvestnih_astored procedurestored procedure2672NULLNULLNULLNULL8262631E-D8AB-4533-BA7B-563FE6D65D0C
8262631E-D8AB-4533-BA7B-563FE6D65D0CNULL12013-05-21 16:00:00.0002835stored procedurestored procedure2672NULLNULLNULLNULLNULL
094906D8-F86D-4921-B39F-ED2BD24B2E57NULL12013-06-04 17:46:38.710NULLprocedureprocedure2672NULLNULLNULLNULL7CEBBA35-1431-448B-A22A-5199C86F51EB



Вся проблеме ещё заключается в том...что надо присваивать записи исходя из столбца Date.
27 авг 13, 10:05    [14758819]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить строке предыдущее значение.  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить строке предыдущее значение.  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
Александо,

https://www.sql.ru/forum/127456/rekomendacii-po-oformleniu-soobshheniy-v-forume
6. Если Ваш вопроc связан с созданием какого-то запроса, то предоставление Вами следующих материалов может существенно ускорить нахождение решения:
- скрипты создания таблиц;
- скрипты заполнения этих таблиц тестовыми данными;


Набросал вариант, но без тестовой таблицы проверить не смогу, так что за правильность не ручаюсь:

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]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить строке предыдущее значение.  [new]
Александо
Member

Откуда:
Сообщений: 7
Спасибо парни. Заработало.
29 авг 13, 11:04    [14769722]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Присвоить строке предыдущее значение.  [new]
Борис А
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]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить строке предыдущее значение.  [new]
iap
Member

Откуда: Москва
Сообщений: 46977
Борис А
Ну и BEGIN - END добавил. ))
??
26 авг 17, 16:21    [20751151]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить строке предыдущее значение.  [new]
iap
Member

Откуда: Москва
Сообщений: 46977
Борис А,

В новых версиях сервера есть функции LAG()OVER() и LEAD()OVER().
Ухищрения с ROW_NUMBER()OVER() в этом случае не нужны.
26 авг 17, 16:24    [20751153]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить