Я подозреваю, что вы хотите показать максимальный результат для каждого учащегося, даже если он сдал несколько тестов, например, если они прошли два теста, вы хотите показать обе даты тестирования и в каждой строке также показать максимальную дату.Если это так, то группировка по всем остальным столбцам не поможет.Может быть, попробуйте это, предполагая SQL Server 2005 или более поздней версии:
WITH md AS
(
SELECT ts.suniq, maxdate = MAX(ts.takendt)
FROM dbo.stutests AS ts
INNER JOIN
dbo.testdef AS td
ON td.testuniq = ts.testuniq
WHERE
td.testuniq IN ('2000089', '2000090', '2000091', '2000092')
GROUP BY ts.suniq
)
SELECT
sd.ident,
sd.suniq,
testc, -- which table does this come from? why no prefix?
subtestc, -- which table does this come from? why no prefix?
ts.testscore,
metadept, -- which table does this come from? why no prefix?
ts.takendt,
md.maxdate
FROM
dbo.studemo AS sd
INNER JOIN
dbo.stutests AS ts
ON sd.suniq = ts.suniq
INNER JOIN
dbo.testdef AS td
ON td.testuniq = ts.testuniq
INNER JOIN
dbo.udefstu AS ud
ON ts.suniq = ud.suniq
INNER JOIN md
ON md.suniq = sd.suniq
WHERE
td.testuniq IN ('2000089', '2000090', '2000091', '2000092')
ORDER BY
sd.suniq; -- you forgot a prefix here too
-- could cause problems if you change the query later