Как переписать запрос, так чтобы агрегатные функции могли работать в условиях WHERE, чтобы вывести значения indx для определенного примера?
Для того чтобы не использовать агрегатные функции в операторе WHERE, можно воспользоваться подзапросом или объединением таблиц. Например, вместо запроса с агрегатной функцией в WHERE: SELECT indx FROM table_name WHERE column_name = (SELECT MAX(column_name) FROM table_name) Можно переписать запрос с использованием подзапроса в SELECT: SELECT indx, ( SELECT MAX(column_name) FROM table_name ) AS max_value FROM table_name WHERE column_name = max_value Если же необходимо использовать агрегатные функции в условии WHERE для вывода значений indx для определенного примера, можно воспользоваться ключевым словом HAVING: SELECT indx FROM table_name GROUP BY indx HAVING MAX(column_name) = 'определенное_значение'
Условие задачи понял так: надо найти индексы записей, которые образуют окно в котором b04 равны тем, что указаны в массиве.
Записи могут идти в любом порядке, поэтому предположил (из примера), что они должны сравниваться в порядке indx
with window_table as ( select array_agg(indx) over prev_rows as indexes, array_agg(b04) over prev_rows as vals from tb window prev_rows as (order by indx rows between 2 preceding and current row) ) select unnest(indexes) from window_table where vals = ARRAY[60, 119, 58];