参照に関連するデータを発効日とともに要約する必要があります。
これらのテーブルを使用した給与スキーマを想像してみましょう
employee work
+----+------+ +----+--------+------------+
| id | name | | id | emp_id | date |
+----+------+ +----+--------+------------+
| 1 | John | | 1 | 1 | 2012-10-05 |
| 2 | Bob | | 2 | 1 | 2012-02-10 |
+----+------+ | 3 | 2 | 2012-09-03 |
| 4 | 1 | 2012-12-12 |
salary | 5 | 1 | 2012-04-04 |
+----+--------+--------------+------------+ | 6 | 2 | 2012-06-09 |
| id | emp_id | daily_amount | start_date | | 7 | 1 | 2012-07-24 |
+----+--------+--------------+------------+ +----+--------+------------+
| 1 | 1 | 10 | 2012-01-01 |
| 2 | 1 | 15 | 2012-04-16 |
| 3 | 2 | 20 | 2012-05-25 |
+----+--------+--------------+------------+
2012-01-01からジョンは日ごとに10を支払われ、2012-04-16から彼の賃金は15に増額されます。
ボブは2012-05-25から20を支払われています。
ここで、2012年に両方の従業員の給与を計算する必要があるとしましょう。これが私の素朴な試みです。
SELECT
emp.name AS "employee"
, SUM(sal.daily_amount) AS "amount"
FROM employee AS emp
JOIN work AS wrk ON (wrk.emp_id = emp.id)
JOIN salary AS sal ON (
sal.emp_id = emp.id
AND wrk.date >= sal.start_date
)
WHERE YEAR(wrk.date) = 2012
GROUP BY emp.id
;
もちろん、MAXを取っていないので欲しいものは出ませんstart_date
質問:2012年にボブとジョンが稼いだ金額はいくらですか?