Вообще говоря, не агрегируемые столбцы должны быть частью предложения GROUP BY
. Вы присоединились к нескольким таблицам, и я не понял, что и где, но - посмотрите, поможет ли это (обратите внимание на комментарии, которые я написал):
SELECT MAX (data1.discount), --> apply aggregate here
data7.osp_id,
data6.id AS sero_id,
data1.estpt_id,
-- data5.festpae_id, --> remove this
MAX (data5.festpae_id) AS max_id
FROM database1 data1
JOIN database2 data2 ON data2.id = data1.attr_id
JOIN database3 data3 ON data3.attr_id = data2.id
JOIN database4 data4 ON data4.objt_attr_id = data3.id
JOIN database5 data5
ON data5.stya_id = data4.id
AND data5.VALUE = 1
JOIN database6 data6 ON data6.id = data5.sero_id
JOIN database7 data7 ON data7.id = data6.data7_id
JOIN database8 data8 ON data8.code = 'CALC1'
WHERE data1.interest_rate = 1
AND data1.ordet_id = data8.id
AND data1.objt_attr_id = data4.objt_attr_id
GROUP BY data7.osp_id, data6.id, data1.estpt_id --> add all non-aggregated columns here
[РЕДАКТИРОВАТЬ]
С примерами данных, которые вы разместили, и запросом, который я предложил применить, к нему, результат, кажется, будет в порядке:
SQL> with test (discount, osp_id, sero_id, estpt_id, festpae_id) as
2 (
3 select 40, 619356, 3931831, 2144, 2000742 from dual union all
4 select 50, 619356, 3931831, 2144, 2000743 from dual union all
5 select 40, 619356, 3931831, 2144, 2000737 from dual union all
6 select 50, 619356, 3931831, 2144, 2000740 from dual
7 )
8 select max(discount) discount,
9 osp_id,
10 sero_id,
11 estpt_id,
12 max(festpae_id) festpae_id
13 from test
14 group by osp_id,
15 sero_id,
16 estpt_id;
DISCOUNT OSP_ID SERO_ID ESTPT_ID FESTPAE_ID
---------- ---------- ---------- ---------- ----------
50 619356 3931831 2144 2000743
SQL>
Как видите, только одна строка возвращается с FESTPAE_ID = 2000743
(последний, как вы хотели). Если вы получили другой результат, должно быть что-то еще. Что бы это было, я не могу сказать - очевидно, запрос работает нормально (с моей точки зрения).