Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Coluna desconhecida na subconsulta mysql


Eu não sou um especialista em MySQL (em MS SQL poderia ser feito mais facilmente), e sua pergunta parece um pouco confusa para mim, mas parece que você está tentando obter a média dos 5 itens anteriores.

Se você tiver ID sem lacunas , é fácil:
select
    p.id,
    (
        select avg(t.deposit)
        from products as t
        where t.itemid = 1 and t.id >= p.id - 5 and t.id < p.id
    ) as avgdeposit
from products as p
where p.itemid = 1
order by p.id desc
limit 15

Se não , então eu tentei fazer essa consulta assim
select
    p.id,
    (
        select avg(t.deposit)
        from (
            select tt.deposit
            from products as tt
            where tt.itemid = 1 and tt.id < p.id
            order by tt.id desc
            limit 5
        ) as t
    ) as avgdeposit
from products as p
where p.itemid = 1
order by p.id desc
limit 15

Mas eu tenho a exceção Unknown column 'p.id' in 'where clause' . Parece que o MySQL não pode lidar com 2 níveis de aninhamento de subconsultas. Mas você pode obter 5 itens anteriores com offset , assim:
select
    p.id,
    (
        select avg(t.deposit)
        from products as t
        where t.itemid = 1 and t.id > coalesce(p.prev_id, -1) and t.id < p.id
    ) as avgdeposit
from 
(
    select
        p.id,
        (
            select tt.id
            from products as tt
            where tt.itemid = 1 and tt.id <= p.id
            order by tt.id desc
            limit 1 offset 6
        ) as prev_id
    from products as p
    where p.itemid = 1
    order by p.id desc
    limit 15
) as p

demonstração do violino sql