@TicSo

Как исправить запрос без агрегатной функции в Where?

Агрегатные функции нельзя применять в конструкции WHERE,

тогда как правильно переписать такой нерабочий вариант:
Select indx FROM tb Where array_agg(b04) = (select ARRAY[60, 119, 58]);
пример:
  indx | b04
--------------
   0   |   77       
   1   |   119         
   2   |   12       
   3   |   60       
   4   |   58       
   5   |   14       
   6   |   60       
   7   |   119       
   8   |   58      
   9   |   33       
   10  |   60       

нужно вынуть значения indx,  для указанного примера,  такие:  6, 7, 8.
  • Вопрос задан
  • 68 просмотров
Решения вопроса 1
AshBlade
@AshBlade
Просто хочу быть счастливым
Условие задачи понял так: надо найти индексы записей, которые образуют окно в котором 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];
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы