Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Заполнение последующих пустых строк последним заполненным значением / 13 сообщений из 13, страница 1 из 1
31.05.2018, 14:12
    #39653288
svanrus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение последующих пустых строк последним заполненным значением
Добрый день,

sql 2005 lead lag отсутсвуют

Как ещё можно в ms sql реализовать подобное заполнение (желательно не цикл) ?

NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
1111#
NULL - должно быть 1111#
2222#
NULL - должно быть 2222#
NULL - должно быть 2222#
NULL - должно быть 2222#
NULL - должно быть 2222#
NULL - должно быть 2222#
NULL - должно быть 2222#
NULL - должно быть 2222#
NULL - должно быть 2222#
NULL - должно быть 2222#
NULL - должно быть 2222#
NULL - должно быть 2222#
NULL - должно быть 2222#
08886
NULL - должно быть 08886
NULL - должно быть 08886
NULL - должно быть 08886
NULL - должно быть 08886
NULL - должно быть 08886
NULL - должно быть 08886
NULL - должно быть 08886

Спасибо
...
Рейтинг: 0 / 0
31.05.2018, 14:19
    #39653295
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение последующих пустых строк последним заполненным значением
lead и lag бы вам не помогли, потому что отсутствует поле, задающее порядок.
...
Рейтинг: 0 / 0
31.05.2018, 14:35
    #39653315
svanrus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение последующих пустых строк последним заполненным значением
Гавриленко Сергей Алексеевич,

а если так ?



28.05.2018 14:40:04 1 NULL
28.05.2018 14:40:07 2 NULL
28.05.2018 14:41:04 3 NULL
28.05.2018 14:41:04 4 NULL
28.05.2018 14:41:04 5 NULL
28.05.2018 14:41:05 6 NULL
28.05.2018 14:42:21 7 NULL
28.05.2018 14:42:22 8 NULL
28.05.2018 14:44:32 9 NULL
28.05.2018 14:44:32 10 NULL
28.05.2018 14:45:08 11 NULL
28.05.2018 14:45:09 12 1111#
28.05.2018 14:46:25 13 NULL - должно быть 1111#
28.05.2018 14:46:25 14 2222#
28.05.2018 14:46:25 15 NULL - должно быть 2222#
28.05.2018 14:46:26 16 NULL - должно быть 2222#
28.05.2018 14:46:33 17 NULL - должно быть 2222#
28.05.2018 14:46:34 18 NULL - должно быть 2222#
28.05.2018 14:47:09 19 NULL - должно быть 2222#
28.05.2018 14:47:09 20 NULL - должно быть 2222#
28.05.2018 14:47:09 21 NULL - должно быть 2222#
28.05.2018 14:47:10 22 NULL - должно быть 2222#
28.05.2018 14:48:15 23 NULL - должно быть 2222#
28.05.2018 14:48:32 24 NULL - должно быть 2222#
28.05.2018 14:48:56 25 NULL - должно быть 2222#
28.05.2018 14:48:56 26 NULL - должно быть 2222#
28.05.2018 14:48:56 27 8886
28.05.2018 14:48:57 28 NULL - должно быть 08886
28.05.2018 14:50:10 29 NULL - должно быть 08886
28.05.2018 14:50:10 30 NULL - должно быть 08886
28.05.2018 14:50:27 31 NULL - должно быть 08886
28.05.2018 14:50:38 32 NULL - должно быть 08886
28.05.2018 14:50:38 33 NULL - должно быть 08886
28.05.2018 14:50:38 34 NULL - должно быть 08886
...
Рейтинг: 0 / 0
31.05.2018, 14:39
    #39653325
Дедушка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение последующих пустых строк последним заполненным значением
например:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
select
isnull(t1.<ваше поле>, t3.[значение на замену])
from
[ваша выборка] t1
cross apply
(
select top 1
t2.[ваше поле] as [значение на замену]
from
[ваша выборка] t2
where
t2.[ваше поле] is not null and
t2.[поле даты] < t1.[поле даты]
order by
t2.[поле даты] desc
) t3
...
Рейтинг: 0 / 0
31.05.2018, 14:44
    #39653329
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение последующих пустых строк последним заполненным значением
Код: sql
1.
2.
3.
4.
select
  a.*
  , isnull ( a.[второе поле], ( select top 1 p.[второе поле] from [а если так] p where p.[первое поле]< a.[первое поле] where p.[второе поле] is not null order by p.[первое поле] desc ) )
from [а если так] a
...
Рейтинг: 0 / 0
31.05.2018, 18:40
    #39653543
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение последующих пустых строк последним заполненным значением
svanrusКак ещё можно в ms sql реализовать подобное заполнение (желательно не цикл) ?логика "протяжки" значений вполне себе успешно реализуется на оконном MAX() OVER(). Осталось только вспомнить - поддерживает ли его MS SQL Server 2005 ?
...
Рейтинг: 0 / 0
31.05.2018, 20:12
    #39653588
andrey odegov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение последующих пустых строк последним заполненным значением
Максимальный - не значит последний:
28.05.2018 14:40:04 1 NULL
28.05.2018 14:40:07 2 NULL
28.05.2018 14:41:04 3 NULL
28.05.2018 14:41:04 4 NULL
28.05.2018 14:41:04 5 NULL
28.05.2018 14:41:05 6 9999#
28.05.2018 14:42:21 7 NULL
28.05.2018 14:42:22 8 NULL
28.05.2018 14:44:32 9 NULL
28.05.2018 14:44:32 10 NULL
28.05.2018 14:45:08 11 NULL
28.05.2018 14:45:09 12 1111#
28.05.2018 14:46:25 13 NULL <— что должно быть здесь 1111# или 9999#?
...
Рейтинг: 0 / 0
31.05.2018, 22:30
    #39653614
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение последующих пустых строк последним заполненным значением
andrey odegovМаксимальный - не значит последний:Эта проблема решается довольно просто:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
declare @t table (id int identity, v int);

insert into @t
values
 (null), (null), (2), (null), (null), (1), (null), (null);

select
 *,
 cast(substring(max(str(id, 10) + str(v, 10)) over (order by id), 11, 10) as int)
from
 @t
order by
 id;
...
Рейтинг: 0 / 0
01.06.2018, 04:28
    #39653655
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение последующих пустых строк последним заполненным значением
invmЭта проблема решается довольно простоИменно!!!
А впервые этот метод мне лично встретился на оракловой ветке форума ;)
...
Рейтинг: 0 / 0
01.06.2018, 04:38
    #39653656
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение последующих пустых строк последним заполненным значением
Щукина Анна,

А, соответственно, про " бабушкин трюк " довелось узнать всё из той же оракловой ветки форума, но немного ранее :)
...
Рейтинг: 0 / 0
01.06.2018, 14:10
    #39653998
andrey odegov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение последующих пустых строк последним заполненным значением
Щукина Анна, у Oracle есть LAST_VALUE (FIRST_VALUE) с IGNORE NULLS.
...
Рейтинг: 0 / 0
03.06.2018, 19:35
    #39654560
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение последующих пустых строк последним заполненным значением
andrey odegov,

во-первых, у Оракла есть не только first_value / last_value с поддержкой ignore nulls, но и LEAD / LAG, как минимум.
во-вторых, по ссылке обсуждается Oracle 8i, в котором уровень развития аналитических функций (в MS их называют - "оконные") хоть и был выше, чем текущая их реализация в MS SQL Server, но кляузы ignore nulls, всё же, ещё не существовала. Она появилась только в версии 10g...
...
Рейтинг: 0 / 0
04.06.2018, 08:49
    #39654664
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение последующих пустых строк последним заполненным значением
в sql тоже уже есть FIRST_VALUE можно дорисовать и с "ignore null"
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Заполнение последующих пустых строк последним заполненным значением / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]