前回の問題をサブクエリを使って解きます。前年度の売上を出すのが一番難しいので、それを出す方法です。MySQLだとそもそも分析関数が存在しないので・・
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
SELECT s2.company, s2.year, s2.sale as recent_sales, ( --前年度の売上はこう出す --出力対象が値か単行か表かをしっかり考える SELECT --こことwhere句の書き方により出力対象が値か単行か表か決まる s1.sale FROM Sales s1 WHERE s1.year = ( SELECT MAX(s0.year) FROM Sales s0 WHERE -- 最初は↓ここの条件が難しいので具体値を入れる s0.company = s2.company and s0.year < s2.year ) and s1.company = s2.company ) as prev_sale FROM Sales s2 ORDER BY s2.company, s2.year |
ポイントはここを参照
テーブルイメージ
- s0は対象年度を表す(例えば2009年度など)テーブル
- s2は対象年度を超えない年度(例えば2008年度など)テーブル
- ただしs0は対象年度(2009年度)という値を出すためだけに存在し、
- 対象年度自体の会社データ、値などはs1で用意する