2012-10-11 54 views
1

我有一個表MySQL的AVG與同桌

date  d_id r_id p_id q_sold onhand 
2012-10-10 5  1 3025 3   10 
2012-10-10 5  1 3022 12   20 
2012-10-10 5  1 3023 15   33 
2012-10-11 5  1 3025 3   10 
2012-10-11 5  1 3022 12   20 
2012-10-11 5  1 3023 15   33 
2012-10-12 5  1 3025 3   10 
2012-10-12 5  1 3022 12   20 
2012-10-12 5  1 3023 15   33 
2012-10-13 5  1 3025 3   10 
2012-10-13 5  1 3022 12   20 
2012-10-13 5  1 3023 15   33 
2012-10-14 5  1 3025 3   10 
2012-10-14 5  1 3022 12   10 
2012-10-14 5  1 3023 15   33 
2012-10-15 5  1 3025 3   5 
2012-10-15 5  1 3022 12   5 
2012-10-15 5  1 3023 15   33 

我想獲得q_sold由平均的現有量超過5天的時間內分結果的日期範圍的領域,而顯示2012-10-15等特定日期的其他數據。

我創建一個查詢

set @stdate = '2012-10-10'; 
set @endate = '2012-10-15'; 
SELECT date, d_id,r_id,p_id,q_sold,onhand,qty_sold/AVG(qty_onhand) 
FROM stp_vwsales_info_tots 
WHERE date BETWEEN @stdate and @endate and d_id=5 
GROUP BY d_id,r_id,p_id 

但結果被顯示不正確,則顯示爲2012年10月10日,而不是2010-10-15

date   d_id r_id p_id q_sold onhand avg 
2012-10-10  5 1 3022 12  20  0.7579 
2012-10-10  5 1 3023 15  33  0.4545 
2012-10-10  5 1 3025 3  10  0.3273 
可以

任何數據幫幫我?

+0

你需要澄清你的要求。我不確定你期望得到什麼! – Mehran

回答

0

使用您的@stdate和@endateDATE(@stdate/@endate)DATE_FORMAT(@stdate/@endate,'%Y-%m-%d')否則,你必須從字符串轉換日期@ stdate/@ endate通過MySQL的

0

我覺得你想找的東西稱爲一個簡單移動平均線

要計算這個,你需要使用內聯子查詢 - 所以性能不會是最好的。

假設你要計算的平均比以前5天期間,嘗試這樣的事情:

SELECT 
    date, d_id, r_id, p_id, q_sold, onhand, 
    (SELECT q_sold/AVG(t2.onhand) 
    FROM stp_vwsales_info_tots AS t2 
    WHERE p_id=t1.p_id AND DATEDIFF(t1.date, t2.date) BETWEEN 0 AND 4 
) AS 'moving_avg' 
FROM stp_vwsales_info_tots AS t1 
GROUP BY t1.p_id,t1.date 
order by t1.date;