VH>> Оно ?
Разобрался, совсем не оно :(
сдесь берётся для having сумма
ВСЕГО "уровня"
ВСЕГО "куста"
, а надо для того же having взять
в условие суммы для каждой "группы"
веток выбранных запросом
Recursion as (
select m0.type_id ti, d0.id ci, d0.quantity q, 0 lvl
from vw_det0 d0 join vw_DOC0 m0
on m0.id = d0.doc_id
and d0.card_id = -1
and d0.tovar_id = :tov_id
где каждая запись этого запроса считается "группой"
как бы отдельным деревом, и если для одной из групп
"дерева" сумма "листов" 3 уровня ЭТОЙ группы =
"листу" начала "группы" то эта "группа" полностью
исключается из дальнейшего запроса
Sums as (
select ti, sum(q) as tmp
from Recursion
group by ti
Т.е. надо по идее использовать всё-же were? и должно получится
что-то наподобии:
with recursive
Recursion as (
select m0.type_id ti, d0.id ci, d0.quantity q, 0 lvl
from vw_det0 d0 join vw_DOC0 m0
on m0.id = d0.doc_id
and d0.card_id = -1
and d0.tovar_id = :tov_id
UNION ALL
select m1.type_id ti, d1.id ci, d1.quantity q, r.lvl + 1
from vw_det0 d1 join vw_DOC0 m1
on m1.id = d1.doc_id
join Recursion r
on r.ci = d1.card_id
)
,
Sums as (
select ti, sum(q) as tmp
from Recursion
where
q > (select sum(q) from recursion where lvl = 3
and
!!!!!!!!!!!!!!!!!!!!!!!!!!!! а вот здесь непонятно как выбрать только
ветки 3-го уровня "текущей" группы
) group by ti
) select ti, tmp from Sums
PS: подобный вариант where допустим, как я предполагаю, при условии что
сумма листов каждого следуещего уровня не может быть больше
суммы длстов предыдуего уровня ...
PPS: короче сам уже путатся начинаю ... :(
С уважением,
Константин Григорьевич.
===============