Możesz użyć WINDOW FUNCTIONS
PostgreSQL
-- we only added infos to the activity_monitor_transaction
-- we are free to group by date_time or status
SELECT
first_value(status) OVER w AS global_transaction_status,
count(*) OVER w AS global_transaction_count,
activity_monitor_transaction.*
FROM
activity_monitor_transaction
WINDOW w AS (
PARTITION BY global_transaction_id
ORDER BY date_time DESC, id DESC
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
)