フィールドにバランス計算になりますRESULTのように、私は以下のようにデータのセットを構成されており、私は結果を取得したい2つのテーブルを持っている:私はMySQLの概要
をバランスフィールドにはまって、どのようにバランスを実行するのですか?
tblIn
in_date | code | in_qty
-----------|---------|---------
2016-04-01 | aaa | 100
2016-04-02 | aaa | 100
2016-04-03 | aaa | 200
2016-04-06 | aaa | 400
tblOut
out_date | code | out_qty
-----------|---------|---------
2016-04-02 | aaa | 100
2016-04-08 | aaa | 400
RESULT
date | code | in_qty | out_qty | balance
-----------|---------|----------|----------|---------
2016-04-01 | aaa | 100 | 0 | 100
2016-04-02 | aaa | 100 | 0 | 200
2016-04-02 | aaa | 0 | 100 | 100
2016-04-03 | aaa | 200 | 0 | 300
2016-04-06 | aaa | 400 | 0 | 700
2016-04-08 | aaa | 0 | 400 | 300
Q私はその結果、この種のをしたい場合は、このクエリはRESULTのような結果が、何を得るでしょう
SELECT
t.*,
@prevBalance := (t.in_qty - t.out_qty) + IFNULL(@prevBalance,0) AS balance
FROM
(
SELECT
in_date date,
code,
in_qty,
0 AS out_qty
FROM tblin
UNION
SELECT
out_date,
code,
0,
out_qty
FROM tblout
) t , (SELECT @prevBalance := NULL) var
ORDER BY t.date;
ueryで(@ 1000111に感謝)。 MySQLは2016-04-03まで一括して要約し、次の日の詳細を続行します。
結果1
date | code | in_qty | out_qty | balance
-----------|---------|----------|----------|---------
2016-04-03 | aaa | 0 | 0 | 300
2016-04-06 | aaa | 400 | 0 | 700
2016-04-08 | aaa | 0 | 400 | 300
神聖で失敗するようです私はこれを探していますが、ちょっと複雑ですが、2つの別々のクエリを実行する方が良いでしょう。 –
私たちがテーブルの日付よりも少ない日付、たとえば2016-03-01を選択すると、ヌル値を防ぐことができますか? –
IFNULL()で2番目のクエリを参照して、NULLの残高を少なくする前に確認してください。 –