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

2012-10-15 のような特定の日付の他のデータを表示しながら、q_sold を 5 日間の手持ちの平均で割った結果を取得したいと考えています。

クエリを作成します

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

しかし、表示される結果は正しくありません。2010-10-15 ではなく 2012-10-10 のデータが表示されます。

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と@endateをそのまま使用するDATE(@stdate/@endate)か、 @ stdate /@endateをMySQLを介して文字列から日付DATE_FORMAT(@stdate/@endate,'%Y-%m-%d')に変換する必要があります

于 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 に答える