曖昧なタイトルには申し訳ありませんが、私がやりたいことはワンライナーではほとんど記述できません。MySQLでは、セミ関連のレコードに基づいてビューフィールドを計算するにはどうすればよいですか?
私は自分の財政を管理するために、MySQL 5.1.30バックエンド付きの簡単なWebアプリケーションを持っています。
id INT PRIMARY KEY,
date DATE
そしてbill_rows
テーブル:
id INT,
bill INT REFERENCES bills (ID),
cost DECIMAL(16,2),
taxable TINYINT(1)
そして最後に、追加のtaxes
列が導入されtaxed_bill_rows
ビュー、:
SELECT
r.id AS `id`,
r.bill AS `bill`,
r.cost AS `cost`,
(CASE
WHEN i.taxable
THEN floor((r.cost * 1.05 * 1.075) * 100)/100.00 - r.cost)
ELSE
0.00
END) AS `taxes`
FROM bill_rows r
1.05倍これはbill
テーブルを持っています連邦税率であり、1.075は地方税率です。 (* 1.05 * 1.075
は間違いではありません:地方税も連邦税に適用されます)
しかし、これらの値はもはや最新ではありません(私は実際これに非常に遅れています)。今年の1月1日からまで以降、連邦税率は1%高く、1.085
までです。税率は、問題を解決するために変更
、私は新しいtax_rates
テーブルを作成しました:
ID INT,
date DATE,
federal DECIMAL(4,2),
provincial DECIMAL(4,2)
税率が変更するたびに、私はそこに新しいレコードを挿入します。
問題は、請求書のdate
フィールドに基づいて、どのように関連する税率にアクセスできますか?私はちょうどLEFT JOIN tax_rates tr ON tr.date < b.date
を行うことができないので、あまりにも多くのレコードを取り戻す可能性があります。 bills
テーブルに外部キーtax_rates
を追加すると、その変更が行われることがありますが、その変更はあまり価値がないようです。
とすると、税率には「無期限に遠い」終了日が必要ですか? – zneak
@ zneak:はい。 –