У меня есть запрос DB2. Может ли кто-нибудь помочь мне написать этот запрос в MS Access. Выделенная строка в таблице — это ожидаемый результат. Спасибо.
SELECT s.Student_ID,
first_value(DT_EFFECTIVE) OVER (PARTITION BY S.Student_ID ORDER BY DT_EFFECTIVE DESC) AS DT_EFFECTIVE,
first_value(Student_Goal) OVER (PARTITION BY S.Student_ID ORDER BY DT_EFFECTIVE DESC) AS Student_Goal
FROM Student AS S
LEFT JOIN St_Goal AS G ON s.Student_ID = G.Student_ID
WHERE S.Student_ID = 12345
Возможный дубликат Верхние n записей на группу sql в доступе


Вы можете сделать это с помощью коррелированного подзапроса:
SELECT s.Student_ID,
(SELECT TOP (1) sg2.DT_EFFECTIVE
FROM St_Goal as sg2
WHERE sg2.Student_ID = S.Student_ID
ORDER BY sg2.DT_EFFECTIVE DESC
) as DT_EFFECTIVE,
(SELECT TOP (1) DT_EFFECTIVE
FROM St_Goal as sg2
WHERE sg2.Student_ID = S.Student_ID
ORDER BY sg2.DT_EFFECTIVE DESC
) as Student_Goal
FROM Student AS S
WHERE S.Student_ID = 12345;
Вам не нужна ссылка на St_Goal во внешнем запросе, если только вам не нужна куча дубликатов.
Существует метод использования TOP N для каждой группы, но для этого требуется уникальное поле идентификатора. Проверить allenbrowne.com/subquery-01.html#TopN