sql >> Database >  >> RDS >> Mysql

Onbekende kolom in mysql-subquery

Ik ben geen MySQL-expert (in MS SQL zou het makkelijker kunnen) en je vraag lijkt me een beetje onduidelijk, maar het lijkt erop dat je probeert het gemiddelde van de vorige 5 items te krijgen.

Als u een Id zonder gaten . heeft , het is gemakkelijk:

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

Zo niet , dan heb ik drie keer geprobeerd om deze query op deze manier uit te voeren

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

Maar ik heb uitzondering Unknown column 'p.id' in 'where clause' . Het lijkt erop dat MySQL geen 2 niveaus van nesting van subquery's aankan. Maar je kunt 5 eerdere items krijgen met offset , zoals dit:

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 fiddle-demo



  1. update als er twee velden zijn, invoegen als dat niet het geval is (MySQL)

  2. Microsoft Access optimaliseren met SQL Server IndyPass – 21-5-19

  3. Actief record in codeigniter

  4. JDBC Create Table Voorbeeld Gebruiksverklaring