मैं एक MySQL विशेषज्ञ नहीं हूं (एमएस एसक्यूएल में इसे आसान किया जा सकता है), और आपका प्रश्न मेरे लिए थोड़ा अस्पष्ट दिखता है, लेकिन ऐसा लगता है कि आप पिछले 5 आइटमों का औसत प्राप्त करने का प्रयास कर रहे हैं।
अगर आपके पास बिना अंतराल वाली आईडी . है , यह आसान है:
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
यदि नहीं , तो मैंने इस क्वेरी को इस तरह करने की कोशिश की है
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
लेकिन मुझे अपवाद मिला है Unknown column 'p.id' in 'where clause'
. ऐसा लगता है कि MySQL उपश्रेणियों के नेस्टिंग के 2 स्तरों को संभाल नहीं सकता है। लेकिन आप offset
के साथ पिछले 5 आइटम प्राप्त कर सकते हैं , इस तरह:
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