Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Можно ли решить с помощью оконных функций-2. Получить последнее вхождение из интервала / 5 сообщений из 5, страница 1 из 1
02.04.2020, 19:40
    #39943283
uaggster
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли решить с помощью оконных функций-2. Получить последнее вхождение из интервала
Вот эту проблему с помощью одних только оконных функций не решить.
Пожалуйста, пристрелите меня скажите уже, что всё, и я смело лягу спать.

Код: sql
1.
2.
3.
4.
5.
6.
7.
Declare @t table (i int, j int, k int identity (1,1))

insert into @t (i,j)
Values (1, 1), (3, 1), (2, 1), (4, 0), (6, 1), (5, 0), (9, 0),  (7, 1), (8, 0), (10, 1), (11, 0)

Select * from @t
Order by k


Нужно получить:

i j k ii1 1 1 Null3 1 2 Null2 1 3 Null4 0 4 46 1 5 Null5 0 6 99 0 7 97 1 8 Null8 0 9 810 1 10 Null11 0 11 11

Во всех непрерывных "островах" нулей в j нужно указать i последнего, в порядке возрастания k.
...
Рейтинг: 0 / 0
02.04.2020, 19:53
    #39943289
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли решить с помощью оконных функций-2. Получить последнее вхождение из интервала
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
with t as
(
 select
  *, sum(j) over (order by k) as s
 from
  @t
)
select
 i, j, k,
 case when j = 0 then last_value(i) over (partition by s order by k rows between current row and unbounded following) end
from
 t
order by
 k;
...
Рейтинг: 0 / 0
02.04.2020, 20:37
    #39943296
uaggster
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли решить с помощью оконных функций-2. Получить последнее вхождение из интервала
Блин. invm , нет слов. Немного смущает With. Но да, бесподобно.
Спасибо еще раз.
...
Рейтинг: 0 / 0
02.04.2020, 22:03
    #39943318
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли решить с помощью оконных функций-2. Получить последнее вхождение из интервала
uaggster
Немного смущает With
Можно запрос из With скопировать в подзапрос вместо t
...
Рейтинг: 0 / 0
03.04.2020, 09:06
    #39943381
uaggster
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли решить с помощью оконных функций-2. Получить последнее вхождение из интервала
alexeyvg
uaggster
Немного смущает With
Можно запрос из With скопировать в подзапрос вместо t

Да я это понимаю.
Просто это кусок одного запроса, одна из задач, по построению транзитивных зависимостей на одной выборке.
Т.е. мне нужно, "в один проход" посчитать кучу вещей, типа последующая запись в скопе для данного ид, предыдущая, последняя, следующая, и следующая, но при этом при поиске следующей нужно исключить обладающие опр. свойствами, или если запись обладает определенными свойствами - то сопоставить ей последний ид непрерывного острова, когда это свойство - неизменно и т.д.
Некоторые моменты - легко сделать, некоторые - не знал как, и даже не уверен, что было возможно.

Но всё встроилось просто замечательно, спасибо invm еще раз.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Можно ли решить с помощью оконных функций-2. Получить последнее вхождение из интервала / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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