rwilliamsによると、age_を保存することはお勧めできません。それは冗長であるように試験が、それはあなたがMostyのソリューションを中心に、簡単なトリガをラップすることができます何をしたいのかである場合 -
CREATE TRIGGER fitness_report_insert BEFORE INSERT ON `fitness_report`
FOR EACH ROW
BEGIN
SET NEW.age_tested = (SELECT DATE_FORMAT(NEW.test_period, '%Y') - DATE_FORMAT(student.date_of_birth, '%Y') - (DATE_FORMAT(NEW.test_period, '00-%m-%d') < DATE_FORMAT(student.date_of_birth, '00-%m-%d')) FROM student WHERE student.student_id = NEW.student_id);
END
これは以前Mostyで述べたようにtest_periodが最新であることを前提としています。私はこれを試していませんが、今はサーバーにアクセスできないので、ちょっと微調整する必要があります。
UPDATE:あなたはあなたの統計のための出発点として、以下のことを試みることができる -
SELECT
DATE_FORMAT(test_period, '%Y') - DATE_FORMAT(date_of_birth, '%Y') - (DATE_FORMAT(test_period, '00-%m-%d') < DATE_FORMAT(date_of_birth, '00-%m-%d')) AS age,
s.gender,
AVG(r.score) AS score
FROM student s
INNER JOIN fitness_report r
ON s.student_id = r.student_id
GROUP BY age, s.gender
私はfitness_reportに年齢を格納しないでしょう。あなたはテストされた日付と学生のdobを持っているので、必要なときにage_testedを計算することができます。 – rwilliams
SELECTを求める場合、指定した日付に基づいて年齢を計算する方法を尋ねていますか? –