select
s.id as sharer_id,
s.number as sharer_number,
t.id as transaction_id,
o.id as operation_id,
cat.mnemonics as account_mnemonics,
t.effective_date,
t.value as transaction_value,
count(*) as rows_after_join,
sum(t.value) as value_after_join,
string_agg(
distinct cast(io.number as text),
', '
) as payment_order_numbers
from back_office.transaction t
join back_office.operation o
on o.id = t.operation_id
join back_office.account ca
on ca.id = t.credit_account_id
join back_office.account_type cat
on cat.id = ca.account_type_id
join back_office.account_type_group catg
on catg.id = cat.account_type_group_id
and catg.mnemonics = 'Н'
join ourpension.sharer s
on s.id = ca.owner_sharer_id
join ourpension.individual i
on i.id = s.individual_id
left join back_office.incoming_order_operation ioo
on ioo.operation_id = o.id
left join back_office.incoming_order io
on io.id = ioo.incoming_order_id
where o.approved is not null
and o.deleted is null
and i.last_name = 'Суханов'
and i.first_name = 'Сергей'
and i.middle_name = 'Сергеевич'
and t.effective_date >= cast('2016-01-21' as date)
and t.effective_date < cast('2016-01-22' as date)
group by
s.id,
s.number,
t.id,
o.id,
cat.mnemonics,
t.effective_date,
t.value
order by
s.number,
t.id;