2016-06-01 11 views
0

私はstockテーブルを持っています。適切なqntyで適格な株式行を取得するための計算が必要です。SET/SPを使用せずにMySQLクエリで入力/以前の結果に基づいて計算

Stock 

----------------------------------------------------------------- 
| id |  item | batch_number | expiry_date | current_stock | 
----------------------------------------------------------------- 
    1   1   BAT-1-1  15 Jun 2016    10 
    2   1   BAT-1-2  20 Jun 2016    5 
----------------------------------------------------------------- 

私はitem = 1 & quantity = 13として入力を持っています。 >eligible = input、他eligible = current_stockinput -= eligibleとして入力をデクリメント - current_stock >= input場合は最寄りの有効期限は)

2好ましい)

1:

私の予想クエリ出力は

---------------------------------------------------------------------------- 
| id |  item | batch_number | expiry_date | current_stock | eligible | 
---------------------------------------------------------------------------- 
    1   1   BAT-1-1  15 Jun 2016    10   10 
    2   1   BAT-1-2  20 Jun 2016    5   3 
---------------------------------------------------------------------------- 

ロジックです

3)次の最も近い有効期限にdecemを使用して手順2を繰り返します処理する行がなくなるか、十分な数量があるまで入力値を入力してください。

SPまたはSETを使用せずにmysqlクエリで可能ですか? Bcoz私はJavaアプリケーションで結果のクエリを実装する必要があります。私はHibernateを使用しているので、SQLまたはhqlまたは条件(可能な場合)としてクエリを実行することができます。

私は上記のロジックのが、さらなる計算に

SELECT 
    id 
    item, 
    batch_number, 
    expiry_date, 
    current_stock, 
    CASE WHEN current_stock >= 13 THEN 13 ELSE current_stock END AS eligible 
FROM 
    stock 
WHERE 
    item = 1 
ORDER BY 
    expiry_date 

を入力値をデクリメントせずにクエリを書いてきた。しかし、それは私が後に入力値をデクリメントしていませんでした2列目だってためeligible = 3を生成しません。最初の行の計算。どんな助けでも大歓迎です。

+0

あなたが悪いスケールます示唆しているようなソリューションを提供します。 '@変数'を使うとより効率的になります – Strawberry

+0

@Strawberry、 '@変数'を使用すると、並行してクエリを実行することができますか? –

+0

これはセッション固有なので、はいです。 – Strawberry

答えて

1

私の算術がオフに少しかもしれないが、このような何かが動作するはずですので、私はまだ、私のコーヒーを持っていませんでした...

SELECT x.* 
    , GREATEST(@i,MOD(current_stock,@i)) eligible 
    , @i:=GREATEST(@i-current_stock,0) i 
    FROM stock x 
    , (SELECT @i:=13) vars 
ORDER 
    BY expiry_date; 
+0

これは期待通りに動作します..ありがとう.. !!それぞれの数量(例: '[item-1、qnty-13]、[item-2、qnty-17]')を持つ複数のアイテムに対して同じことが可能かどうか疑問に思うだけです。 itemに対して 'where'句を使って全てのアイテムに対してこのクエリを実行することは可能ですが、qnty(単一クエリで)の複数アイテムの可能な方法はSPを使用していると思います。何かご意見は..! –

+0

私はあなたが示唆するようにそれはsprocが必要だと思います - しかし、誰かが別のアイデアを持っているかもしれません。 – Strawberry

+0

正しい結果を得るためにクエリにいくつかの変更を加えました..正しい方向を指してくれてありがとう.. –

関連する問題