|
поиск минимума внутри рекурсии
|
|||
---|---|---|---|
#18+
Здравствуйте, в указанном запросе в 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_ ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2020, 11:56 |
|
поиск минимума внутри рекурсии
|
|||
---|---|---|---|
#18+
Первым делом тредстартер должон ответить на вопрос: Нафига козе баян ему этот бред? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2020, 12:33 |
|
поиск минимума внутри рекурсии
|
|||
---|---|---|---|
#18+
aleks222 Первым делом тредстартер должон ответить на вопрос: Нафига козе баян ему этот бред? погружаюсь в рекурсию ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2020, 12:40 |
|
поиск минимума внутри рекурсии
|
|||
---|---|---|---|
#18+
martinezo, рекурсия - это экономия кода. Если напишите код так, чтоб одна и та же функция будет соответствовать всем требованиям для разного набора данных, то сможете ее использовать как рекурсивную. Ваши итерации - это просмотр таблицы, отсортированной в нужном порядке. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2020, 16:08 |
|
поиск минимума внутри рекурсии
|
|||
---|---|---|---|
#18+
Владислав Колосов martinezo, рекурсия - это экономия кода. Если напишите код так, чтоб одна и та же функция будет соответствовать всем требованиям для разного набора данных, то сможете ее использовать как рекурсивную. Ваши итерации - это просмотр таблицы, отсортированной в нужном порядке. я пытаюсь для каждой итерации найти минимальное значение n из таблицы t вот так: zm= (min(y.n)over (partition by y."row",y.cbf), дальше в следующей итерации мне надо это значение исключить , чтобы найти новый минимум из таблицы t и так дальше до конца пока таблица t не закончится, но в таком виде через рекурсию внутри каждой итерации минимум разный как на моем скрине, подскажите, пожалуйста, как добиться чтобы он был одинаковым внутри одной итерации рекурсии? Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2020, 16:32 |
|
поиск минимума внутри рекурсии
|
|||
---|---|---|---|
#18+
martinezo погружаюсь в рекурсию Если слишком погрузиться в рекурсию, то из неё можно потом и не выйти ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2020, 19:31 |
|
поиск минимума внутри рекурсии
|
|||
---|---|---|---|
#18+
хотелось бы услышать ответ на мой вопрос ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2020, 11:22 |
|
|
start [/forum/topic.php?fid=46&msg=40022810&tid=1685360]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
74ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 182ms |
0 / 0 |