Mysql
 sql >> Base de données >  >> RDS >> Mysql

Colonne inconnue dans la sous-requête mysql

Je ne suis pas un expert MySQL (dans MS SQL, cela pourrait être fait plus facilement), et votre question me semble un peu floue, mais il semble que vous essayez d'obtenir la moyenne des 5 éléments précédents.

Si vous avez un identifiant sans lacunes , c'est simple :

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

Si non , alors j'ai tri essayé de faire cette requête comme ça

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

Mais j'ai une exception Unknown column 'p.id' in 'where clause' . On dirait que MySQL ne peut pas gérer 2 niveaux d'imbrication de sous-requêtes. Mais vous pouvez obtenir 5 éléments précédents avec offset , comme ceci :

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

démo de violon SQL