Как переписать запрос, так чтобы агрегатные функции могли работать в условиях 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 равны тем, что указаны в массиве. <br/> Записи могут идти в любом порядке, поэтому предположил (из примера), что они должны сравниваться в порядке indx <br/> <pre><code class="sql">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];</code></pre>