2017-08-02 3 views
0

私は以下のようなテーブルを持っています。ここで、ユーザーは商品(たとえばQuantity - 5000とProduct - P001など)を1つ入力し、返品行のデータを入力する必要があります。私が最初に入力の合計が一番上の行

Batch  |Product | Date    | Quantity | 
------------+---------+--------------------+-----------+ 
D001  |P001  | 1Jul2017   | 1000  | 
D002  |P001  | 10Jul2017   | 2000  | 
D003  |P001  | 15Jul2017   | 3000  | 
D004  |P001  | 18Jul2017   | 5500  | 
D005  |P002  | 12Jul2017   | 3000  | 
D006  |P002  | 14Jul2017   | 2000  | 
D007  |P002  | 15Jul2017   | 4000  | 

を終了し、最終的な出力のようなものでなければなりません。..どのバッチで彼の量が果たしていきますと、それは賢明な日付でなければなりません意味します。

Batch  |Product | Date    | Quantity | 
------------+---------+--------------------+-----------+ 
D001  |P001  | 1Jul2017   | 1000  | 
D002  |P001  | 10Jul2017   | 2000  | 
D003  |P001  | 15Jul2017   | 2000  | 
+0

これまでに何を試しましたか? – SandPiper

+0

私は非常に多くのことを試みましたが、ここに投稿されたすべての浪費thatswhy –

+0

部署は常に結果セットのD001ですか? – CiccioRocca

答えて

0

累積合計が必要なようです。あなたが望む数量が@quantityであるとしましょう。その後、 。 。

select t.*, 
     (case when cume_q < @quantity then quantity 
      else cume_q - @quantity 
     end) as used_quantity 
from (select t.*, (@q := @q + t.quantity) as cume_q 
     from t cross join 
      (select @q := 0) params 
     where product = @product 
     order by date 
    ) t 
where (cume_q - quantity) < @quantity; 

サブクエリは累積合計を計算します。別々に実行して、何が起きているのかを見ることができます。 MySQLの変数について知りたければ、ドキュメントを参照してください。

外側のwhereは、累積合計があれば、必要な行だけを選択します。

+0

何が起こっているのか分かりませんでした。 –

関連する問題