我有一张桌子
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有人能帮上忙吗?
发布于 2012-10-11 13:49:40
使用@stdate和@endate作为DATE(@stdate/@endate)或DATE_FORMAT(@stdate/@endate,'%Y-%m-%d'),否则必须通过MySQL将字符串转换为日期
发布于 2012-10-15 17:20:37
我想你要找的是一种叫做简单移动平均的东西。
为了计算这一点,你需要使用内联子查询-所以性能不会是最好的。
假设您想要计算前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;https://stackoverflow.com/questions/12832901
复制相似问题