sql >> Databasteknik >  >> RDS >> Mysql

Okänd kolumn i mysql-underfrågan

Jag är ingen MySQL-expert (i MS SQL skulle det kunna göras enklare), och din fråga ser lite oklar ut för mig, men det ser ut som att du försöker få ett genomsnitt av föregående 5 objekt.

Om du har Id utan luckor , det är enkelt:

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

Om inte , sedan har jag försökt göra den här frågan så här

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

Men jag har undantag Unknown column 'p.id' in 'where clause' . Det verkar som att MySQL inte kan hantera två nivåer av kapsling av underfrågor. Men du kan få 5 tidigare objekt med offset , så här:

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

sql fioldemo



  1. ORDER BY Subquery för GROUP BY to JOIN-konvertering

  2. Välj flera summor med MySQL-fråga och visa dem i separata kolumner

  3. PHP Lägger till databasresultat till flerdimensionell array

  4. org.postgresql.util.PSQLEUndantag:Stora objekt får inte användas i auto-commit-läge