PL/SQL code using WITH
WITH couples AS (select id,
trx_number,
count(*) cnt
from xxxx
where request_id=123
group by id, trx_number
-- order by trx_number --cnt
),
couples_rn AS (SELECT rownum rn,
id,
trx_number,
cnt
FROM couples
WHERE cnt <= 4
)
SELECt rn,
id,
trx_number,
cnt,
cnt_sum,
batch_number
FROM couples_rn
MODEL DIMENSION BY (rn)
MEASURES(id, trx_number, cnt, cnt as cnt_sum, 1 as batch_number)
RULES(
cnt_sum[rn > 1] = case when cnt_sum[CV()-1] + cnt[CV()] > 50 then cnt[CV()] else cnt_sum[CV()-1] + cnt[CV()] end,
batch_number[rn > 1] = case when cnt_sum[CV()-1] + cnt[CV()] > 50 then batch_number[CV()-1] + 1 else batch_number[CV()-1] end