powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / поиск минимума внутри рекурсии
8 сообщений из 8, страница 1 из 1
поиск минимума внутри рекурсии
    #40022709
martinezo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте,
в указанном запросе в cte rec отрабатывает рекурсия, соединяющая таблицы p и t,
я пытаюсь для каждой итерации n_ в вычислительной части рекурсии найти zm =минимальному значению n относительно столбцов row и cbf то есть zm= (min(y.n)over (partition by y."row",y.cbf) а потом для последующих итераций исключать значение zm из предыдущих итераций по условию rec.zm is null
Но согласно правилам рекурсии , рекурсия отрабатывает для каждой строки в вычислительной части и этот минимум разный внутри для каждой итерации. См. скрин для n_=2 zm должен быть равен =1 , для следующей =2 и т.д.
Подскажите, пожалуйста, как этого добиться через рекурсию?
Спасибо
with p as (
select 1 n, 3 cbf, 10 id
union
select 2 n, 3 cbf, 11 id
union
select 3 n, 3 cbf, 12 id
union
select 4 n, 3 cbf, 13 id
union
select 5 n, 2 cbf, 17 id
union
select 6 n, 2 cbf, 18 id
union
select 7 n, 2 cbf, 19 id
union
select 8 n, 2 cbf, 20 id
union
select 9 n, 2 cbf, 21 id
union
select 10 n, 1 cbf, 28 id
union
select 11 n, 1 cbf, 29 id
union
select 12 n, 1 cbf, 30 id
union
select 13 n, 1 cbf, 31 id
),
res3 as (
select ceiling(max(cast(id as numeric(20,2)))/3)*3 crow from p)


,
t as (select 1 n, 1 "row", 1 col

union all

select n +1 ,
case when (n+1)%3<>0 then ((n+1)/3) +1
else (n+1)/3 end r ,
case when (n+1)%3<>0 then (n+1)%3 else 3 end
col from t where n<(select crow from res3)
)
-- select * from t
,rec as (
select 1 n_,
p.n num,
p.id,
p.cBF,
t.n,
isnull(t."row",-1) "row",
isnull(t.col,-1) col,
case when p.cbf=t."row" and t.col=1 then t.n else null end zm
from p, t
where p.n=1
union all


select y.n_,
y.num,
y.id,
y.cbf,
y.n,
y."row" ,
y.col,

min (y.n)over (partition by y."row",y.cbf)
zm



from (
select 1+n_ n_, p.n num, p.id, p.cbf, isnull(rec.n,-1) n, isnull(rec."row",-1) "row", isnull(rec.col,-1) col,rec.zm --rec.n, rec.row, rec.col,



from p, rec
where rec.n_+1 =p.n and rec.zm is null
)y

--)x
)
select * from rec where n_<=2
order by n_
...
Рейтинг: 0 / 0
поиск минимума внутри рекурсии
    #40022736
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Первым делом тредстартер должон ответить на вопрос: Нафига козе баян ему этот бред?
...
Рейтинг: 0 / 0
поиск минимума внутри рекурсии
    #40022740
martinezo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aleks222
Первым делом тредстартер должон ответить на вопрос: Нафига козе баян ему этот бред?

погружаюсь в рекурсию
...
Рейтинг: 0 / 0
поиск минимума внутри рекурсии
    #40022810
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
martinezo,

рекурсия - это экономия кода. Если напишите код так, чтоб одна и та же функция будет соответствовать всем требованиям для разного набора данных, то сможете ее использовать как рекурсивную.

Ваши итерации - это просмотр таблицы, отсортированной в нужном порядке.
...
Рейтинг: 0 / 0
поиск минимума внутри рекурсии
    #40022817
martinezo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав Колосов
martinezo,

рекурсия - это экономия кода. Если напишите код так, чтоб одна и та же функция будет соответствовать всем требованиям для разного набора данных, то сможете ее использовать как рекурсивную.

Ваши итерации - это просмотр таблицы, отсортированной в нужном порядке.

я пытаюсь для каждой итерации найти минимальное значение n из таблицы t вот так: zm= (min(y.n)over (partition by y."row",y.cbf),
дальше в следующей итерации мне надо это значение исключить , чтобы найти новый минимум из таблицы t и так дальше до конца пока таблица t не закончится, но в таком виде через рекурсию внутри каждой итерации минимум разный как на моем скрине, подскажите, пожалуйста, как добиться чтобы он был одинаковым внутри одной итерации рекурсии? Спасибо.
...
Рейтинг: 0 / 0
поиск минимума внутри рекурсии
    #40022874
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
martinezo
погружаюсь в рекурсию

Если слишком погрузиться в рекурсию, то из неё можно потом и не выйти
...
Рейтинг: 0 / 0
поиск минимума внутри рекурсии
    #40022949
martinezo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
хотелось бы услышать ответ на мой вопрос
...
Рейтинг: 0 / 0
поиск минимума внутри рекурсии
    #40022973
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
martinezo
хотелось бы услышать ответ на мой вопрос


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


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