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