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

Откуда:
Сообщений: 13
Друзья, гуру sql, доброй ночи.
Нужна ваша помощь
Есть вот такая таблица
2030-12-14
2032-12-14
NULL
NULL
NULL
NULL
NULL
2038-12-14
NULL
т.е. есть границы дат, между ними строки с NULL, нужно их update
Что бы получилось так

2030-12-14
2032-12-14
2032-12-14
2032-12-14
2032-12-14
2032-12-14
2032-12-14
2038-12-14
2038-12-14

Желательно что б работало быстро и на больших объемах.
Приму любые версиии, намёки и прочее, буду очень благодарен.
Спасибо.

П.С. курсор не предлагать )))
23 сен 15, 22:36    [18187691]     Ответить | Цитировать Сообщить модератору
 Re: Update в цикле, помощь нужна ваша  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
Намек - без критерия упорядочивания строк задача корректно не решается. Что с курсором, что без.
23 сен 15, 23:00    [18187771]     Ответить | Цитировать Сообщить модератору
 Re: Update в цикле, помощь нужна ваша  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
У топикастера скорее всего рядом еще пачка столбцов))
23 сен 15, 23:18    [18187820]     Ответить | Цитировать Сообщить модератору
 Re: Update в цикле, помощь нужна ваша  [new]
Spen
Member

Откуда:
Сообщений: 13
Друзья, всем спасиб за ответы, был не прав, исправлюсь -

id row mod val
1 0 null 14.12.2030
2 1 modA 14.12.2032
3 2 modB NULL
4 3 modC NULL
5 4 modE NULL
6 5 modA 14.12.2038
7 6 modF NULL
8 0 null 14.12.2031
9 1 modA 14.12.2033
10 2 modE NULL
11 3 modX NULL
12 4 modC NULL
13 5 modA 14.12.2035
14 6 modZ NULL


id row mod val
1 0 null 14.12.2030
2 1 modA 14.12.2032
3 2 modB 14.12.2032
4 3 modC 14.12.2032
5 4 modE 14.12.2032
6 5 modA 14.12.2038
7 6 modF 14.12.2038
8 0 null 14.12.2031
9 1 modA 14.12.2033
10 2 modE 14.12.2033
11 3 modX 14.12.2033
12 4 modC 14.12.2033
13 5 modA 14.12.2035
14 6 modZ 14.12.2035
24 сен 15, 09:58    [18188371]     Ответить | Цитировать Сообщить модератору
 Re: Update в цикле, помощь нужна ваша  [new]
iap
Member

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

а если для id=1 val=NULL?
24 сен 15, 10:02    [18188384]     Ответить | Цитировать Сообщить модератору
 Re: Update в цикле, помощь нужна ваша  [new]
Glory
Member

Откуда:
Сообщений: 104751
Ну так для каждой записи с val=NULL ищите 1ую запись, с меньшим id и не-NULL в val
24 сен 15, 10:03    [18188387]     Ответить | Цитировать Сообщить модератору
 Re: Update в цикле, помощь нужна ваша  [new]
Spen
Member

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

Нет, такоего быть не может
если row = 0, то VAL заполнена всегда
24 сен 15, 10:05    [18188394]     Ответить | Цитировать Сообщить модератору
 Re: Update в цикле, помощь нужна ваша  [new]
Spen
Member

Откуда:
Сообщений: 13
Glory,
не много не понял ход ваших мыслей
24 сен 15, 10:09    [18188415]     Ответить | Цитировать Сообщить модератору
 Re: Update в цикле, помощь нужна ваша  [new]
Добрый Э - Эх
Guest
Spen,

"протяжка" значений + MERGE
24 сен 15, 10:11    [18188425]     Ответить | Цитировать Сообщить модератору
 Re: Update в цикле, помощь нужна ваша  [new]
Glory
Member

Откуда:
Сообщений: 104751
Spen
не много не понял ход ваших мыслей

Для каждой записи, где val=NULL
ищите
другую запись, у которой id наибольший, но меньше id текущей записи, а val <> NULL
24 сен 15, 10:14    [18188438]     Ответить | Цитировать Сообщить модератору
 Re: Update в цикле, помощь нужна ваша  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
UPDATE T
SET T.val=D.val
FROM T
OUTER APPLY (SELECT TOP(1) TT.val FROM T TT WHERE TT.id<=T.id AND TT.val IS NOT NULL ORDER BY TT.id DESC) D
WHERE T.val IS NULL;
24 сен 15, 10:16    [18188446]     Ответить | Цитировать Сообщить модератору
 Re: Update в цикле, помощь нужна ваша  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Spen
iap,

Нет, такоего быть не может
если row = 0, то VAL заполнена всегда
Зуб даёте?
24 сен 15, 10:17    [18188449]     Ответить | Цитировать Сообщить модератору
 Re: Update в цикле, помощь нужна ваша  [new]
Spen
Member

Откуда:
Сообщений: 13
даю )
24 сен 15, 10:24    [18188492]     Ответить | Цитировать Сообщить модератору
 Re: Update в цикле, помощь нужна ваша  [new]
Spen
Member

Откуда:
Сообщений: 13
Спасибо, всем за ответы, доберусь до кода, попробую и отпишу.
Всем пива )))
24 сен 15, 10:25    [18188501]     Ответить | Цитировать Сообщить модератору
 Re: Update в цикле, помощь нужна ваша  [new]
Spen
Member

Откуда:
Сообщений: 13
iap
UPDATE T
SET T.val=D.val
FROM T
OUTER APPLY (SELECT TOP(1) TT.val FROM T TT WHERE TT.id<=T.id AND TT.val IS NOT NULL ORDER BY TT.id DESC) D
WHERE T.val IS NULL;



друг. твой код рабочий, спасибо.
Но есть одно но - он не правильно работает если поле id не икрементное.
24 сен 15, 16:34    [18190874]     Ответить | Цитировать Сообщить модератору
 Re: Update в цикле, помощь нужна ваша  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
Spen
Но есть одно но - он не правильно работает если поле id не икрементное.
18187771
24 сен 15, 16:41    [18190927]     Ответить | Цитировать Сообщить модератору
 Re: Update в цикле, помощь нужна ваша  [new]
Spen
Member

Откуда:
Сообщений: 13
invm
Spen
Но есть одно но - он не правильно работает если поле id не икрементное.
18187771


Да-да прошу прошения, мой косяк.
Ну вообщем всем спасибо кто поучаствовал.
24 сен 15, 16:55    [18191054]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить