Почему мой postgres боковой подзапрос не работает? - PullRequest
0 голосов
/ 29 января 2020

Я пытаюсь выполнить следующий запрос с поддержкой postgres для подзапросов LATERAL:

with s as
    (
        select
            tagValues ->> 'mode' as metric
            , array_agg(id) as ids
        from
            metric_v3.v_series
        where
            name = 'node_cpu'
        group by 1
    )
select
    t.starttime
    , s.metric
    , t.max
from
    s, lateral (
        select
            d.starttime
            , max(d.max) as max
        from
            metric_v3.gaugedata d
        where
            d.starttime >= '2020-01-17T00:00Z' AND  d.starttime < '2020-01-24T00:00Z'
            and d.seriesid in s.ids
        group by 1
    ) t
order by 1,2;

Не удается выполнить, где s относится к ссылке в предложении where бокового подзапроса.

SQL Error [42601]: ERROR: syntax error at or near "s"

Я пробовал разные методы для бокового запроса, но всегда получаю одну и ту же ошибку. Я не знаю, что мне не хватает.

Если я запускаю выражение CTE и выбираю s. * Из него, я получаю ожидаемые результаты, так что эта часть работает нормально.

Я использую Postgres 11,6 на CentOS.

1 Ответ

1 голос
/ 29 января 2020

Вы не можете использовать IN с массивом. Вам необходимо использовать оператор ANY:

and d.seriesid = any(s.ids)
...