rwilliams가 말했듯이 age_를 저장하는 것은 좋지 않습니다.
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
이 test_period 이전 MOSTY에서 언급 한 바와 같이 날짜가 있다고 가정합니다 - 그것은 중복하지만 당신이 MOSTY의 솔루션 주위에 간단한 트리거를 포장 할 수 있습니다 무엇을 원하는 경우로 테스트했습니다. 지금 서버에 대한 액세스 권한이 없으므로 시도하지 않았으므로 약간의 조정이 필요할 수 있습니다.
업데이트 : 당신은 통계의 시작 지점으로 다음을 시도해 볼 수도 있습니다 -
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를 요청하는 경우 주어진 날짜를 기준으로 연령을 계산하는 방법을 묻는 것입니까? –