私はこのようなテーブルがあります。MYSQL 1つの文で合計列の値と特定の行エントリを選択する方法はありますか。
+-----------+------------+---------------+-------------+--------------+
| member_id | balance | amount | new_balance | time |
+-----------+------------+---------------+-------------+--------------+
| 5 | 630 | -30 | 600 | 2017-08-14 |
| 3 | 142 | -68 | 74 | 2017-08-14 |
| 3 | 120 | 22 | 142 | 2017-08-13 |
| 3 | 0 | 120 | 120 | 2017-08-12 |
| 20 | 300 | 324 | 624 | 2017-08-12 |
| 4 | 100 | -30 | 70 | 2017-08-11 |
| 4 | 0 | 100 | 100 | 2017-08-10 |
| 5 | 30 | 600 | 630 | 2017-08-10 |
+-----------+------------+---------------+-------------+--------------+
をそして私が選択することを期待するようなものである:一定期間内にまとめたものである
+-----------+------------+---------------+---------------+-------------+
| member_id | balance | in_amount | out_amount | new_balance |
+-----------+------------+---------------+---------------+-------------+
| 3 | 0 | 142 | 0 | 142 |
| 4 | 100 | 0 | -30 | 70 |
| 5 | 630 | 0 | 0 | 630 |
| 20 | 300 | 324 | 0 | 624 |
+-----------+------------+---------------+---------------+-------------+
(2017- 2017年8月11日まで08-13)。
残高:期間の開始時の残高。
in_amount:期間内の正の金額の合計。
out_amount:期間内の負の金額の合計。
new_balance:期間終了時の残高。
私は収入と結果を得るために、のような声明をうまくしている:
set @start = "2017-08-11 00:00:00";
set @end = "2017-08-13 00:00:00";
SELECT
DISTINCT(member_id),
sum(if(amount>0, amount, 0)) as in_amount,
sum(if(amount<0, amount, 0)) as out_amount,
FROM transaction
WHERE
(time BETWEEN @start and @end)
group by member_id;
をしかし、私は声明の中にバランスとnew_balanceを含むようには考えています。誰かが私に何か提案がありますか?
私はメンバー3のためのあなたの出力に従っていません、なぜメンバー5が行方不明ですか? –
サンプルデータのタイムフレームに324のエントリが1つしかない場合、20人が22の結果(流出)を得るにはどうすればよいですか? –
この収入と結果は何ですか?なぜメンバーid 5が期待された結果で拒否されるのですか?バランスを超えた論理は何ですか?あなたに質問してください。 – Shibon