Je ne suis pas un expert MySQL (dans MS SQL, cela pourrait être fait plus facilement), et votre question me semble un peu floue, mais il semble que vous essayez d'obtenir la moyenne des 5 éléments précédents.
Si vous avez un identifiant sans lacunes , c'est simple :
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
Si non , alors j'ai tri essayé de faire cette requête comme ça
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
Mais j'ai une exception Unknown column 'p.id' in 'where clause'
. On dirait que MySQL ne peut pas gérer 2 niveaux d'imbrication de sous-requêtes. Mais vous pouvez obtenir 5 éléments précédents avec offset
, comme ceci :
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