Anh, chị, bạn nào giúp em CSDL

Cập nhật giá trị điểm trung bình tất cả các môn học (DIEMTB) của mỗi học viên(HOCVIEN) (tất cả các môn học đều có hệ số 1 và nếu học viên thi một môn nhiều lần, chỉ lấy điểm của lần thi sau cùng). Thuộc tình lần thi và điểm thi trong bảng KETQUATHI:sosad:
mong anh, chị và các bạn giúp em sớm sắp nộp bài rồi!!!:sosad:

up len cho anh chi nao giup em voi!!!:pudency:

Em phải tìm lần thi lớn nhất của 1 học viên ở 1 môn học, tương ứng với câu select bên ngoài. Vậy em phải kết câu select bên trong với bên ngoài theo cả mã học viên và mã môn học; ngoài ra phải gom nhóm theo cả mã học viên, mã môn học.
[Trích] Thầy Nghiệp.

VD: LANTHI(select MAX(LANTHI) from KETQUATHI…)
Anh chỉ hướng dẫn em làm được tới đâu rồi post lên anh sẽ hướng dẫn tiếp!

[QUOTE=09520184;255711]Em phải tìm lần thi lớn nhất của 1 học viên ở 1 môn học, tương ứng với câu select bên ngoài. Vậy em phải kết câu select bên trong với bên ngoài theo cả mã học viên và mã môn học; ngoài ra phải gom nhóm theo cả mã học viên, mã môn học.
[Trích] Thầy Nghiệp.

VD: LANTHI(select MAX(LANTHI) from KETQUATHI…)
Anh chỉ hướng dẫn em làm được tới đâu rồi post lên anh sẽ hướng dẫn tiếp![/QUOTE]
lần th lớn nhất thì dễ hơn chút rồi đây lại là lần thi sau cùng.Cũng đang tính ignore cái chỗ này

UPDATE HOCVIEN
SET DIEMTB = T.TB
FROM HOCVIEN HV INNER JOIN(SELECT MAHV, AVG(SUM_D) AS TB
FROM (SELECT MAHV, SUM(DIEM) AS SUM_D
FROM KETQUATHI
WHERE LANTHI = (SELECT MAX(LANTHI) FROM KETQUATHI GROUP BY MAHV, MAMH)
GROUP BY MAHV, MAMH
)
) T
ON T.MAHV = HOCVIEN.MAHV
Em làm như thế này! anh xem giùm em!

[QUOTE=09520184;255711]Em phải tìm lần thi lớn nhất của 1 học viên ở 1 môn học, tương ứng với câu select bên ngoài. Vậy em phải kết câu select bên trong với bên ngoài theo cả mã học viên và mã môn học; ngoài ra phải gom nhóm theo cả mã học viên, mã môn học.
[Trích] Thầy Nghiệp.

VD: LANTHI(select MAX(LANTHI) from KETQUATHI…)
Anh chỉ hướng dẫn em làm được tới đâu rồi post lên anh sẽ hướng dẫn tiếp![/QUOTE]
UPDATE HOCVIEN
SET DIEMTB = T.TB
FROM HOCVIEN HV INNER JOIN(SELECT MAHV, AVG(SUM_D) AS TB
FROM (SELECT MAHV, SUM(DIEM) AS SUM_D
FROM KETQUATHI
WHERE LANTHI = (SELECT MAX(LANTHI) FROM KETQUATHI GROUP BY MAHV, MAMH)
GROUP BY MAHV, MAMH
)
) T
ON T.MAHV = HOCVIEN.MAHV
Em làm như thế này, anh xem giúp em!

Mình thì mình làm thế này:

UPDATE HOCVIEN
SET DIEMTB = (SELECT AVG(DIEM)
				FROM KETQUATHI K1
				WHERE LANTHI = (SELECT MAX(LANTHI)
								FROM KETQUATHI K2
								WHERE (K1.MAHV = K2.MAHV AND K1.MAMH = K2.MAMH)
								GROUP BY MAHV,MAMH)
				GROUP BY MAHV
				HAVING MAHV = HOCVIEN.MAHV)

[QUOTE=12520037;255719]lần th lớn nhất thì dễ hơn chút rồi đây lại là lần thi sau cùng.Cũng đang tính ignore cái chỗ này[/QUOTE]
Ủa thấy lần thi lớn nhất chính là lần thì sau cùng mà :smiley: