Ich bin kein MySQL-Experte (in MS SQL könnte es einfacher sein), und Ihre Frage sieht für mich etwas unklar aus, aber es sieht so aus, als würden Sie versuchen, den Durchschnitt der vorherigen 5 Elemente zu erhalten.
Wenn Sie eine ID ohne Lücken haben , es ist ganz einfach:
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
Falls nicht , dann habe ich versucht, diese Abfrage so auszuführen
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
Aber ich habe Ausnahme Unknown column 'p.id' in 'where clause'
. Sieht so aus, als ob MySQL 2 Ebenen der Verschachtelung von Unterabfragen nicht verarbeiten kann. Aber Sie können 5 vorherige Elemente mit offset
erhalten , etwa so:
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