今回は分析関数系のネタです。
以前にも分析関数を少し学習しましたがMySQLにはないので、サブクエリを使い書くことになります。
下記のような入出金講座があるとします。
Accounts
prc_date | prc_amt
————+———
2006-10-26 | 12000
2006-10-28 | 2500
2006-10-31 | -15000
2006-11-03 | 34000
2006-11-04 | -5000
2006-11-06 | 7200
2006-11-11 | 11000
ここから現在の口座残高を求めてみます。ここでは分析関数を使うと非常に楽です。例えば下記のように書いてみましょう
1 2 3 4 5 6 |
SELECT prc_date, prc_amt, SUM(prc_amt ) OVER ( ORDER BY prc_date ) AS onhand_amt FROM Accounts |
prc_date | prc_amt | onhand_amt
————+———+————
2006-10-26 | 12000 | 12000
2006-10-28 | 2500 | 14500
2006-10-31 | -15000 | -500
2006-11-03 | 34000 | 33500
2006-11-04 | -5000 | 28500
2006-11-06 | 7200 | 35700
2006-11-11 | 11000 | 46700
ただ残念なことにMySQLでは入っていないのでこれをサブクエリを使って求めます。
1 2 3 4 5 6 |
SELECT a1.prc_date, a1.prc_amt, ( SELECT SUM( prc_amt ) FROM Accounts a2 WHERE a2.prc_date <= a1.prc_date ) AS onhand_amt FROM Accounts a1 |
これもやはり自己結合でがんがえると物凄いわかりやすいです。