1

我有一张桌子

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

任何人都可以帮忙吗?

4

2 回答 2

0

使用您的@stdate 和@endateDATE(@stdate/@endate)否则您必须通过MySQLDATE_FORMAT(@stdate/@endate,'%Y-%m-%d')@stdate/@endate从字符串转换为日期

于 2012-10-11T05:49:39.577 回答
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;
于 2012-10-15T09:20:37.203 回答