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