SQL (MS ACCESS) Объединение таблиц на основе максимального значения - PullRequest
0 голосов
/ 06 октября 2018

Я пытаюсь объединить таблицы в MS ACCESS.Рассматриваемые таблицы: PatientDB и DailyAssessment.

Таблица PatientDB содержит первичный ключ Patient_UID.

Таблица DailyAssessment содержит первичный ключ Assessment_UID.Он также содержит поле Patient_UID, которое связано с PatientDB в отношениях базы данных.

Я пытаюсь достичь:

Выбрать все записи из таблицы PatientDB, которые соответствуют критериям: Patient_Active = TRUE.

Для каждой активной записи я хочу получить самую последнюю запись в таблице DailyAssessments.До сих пор я пытался добиться этого с помощью:

Max (Assessment_UID) As MaxOfAssessment_UID

Затем с помощью этого значения пытаюсь присоединиться к запросу, который возвращает другие значения в таблице DailyAssessment.

SQL выглядит следующим образом:

SELECT PatientDB.Patient_UID, 
Max(DailyAssessment.Assessment_UID) AS 
MaxOfAssessment_UID, 
qryAssessmentData.Assessment_Date, 
qryAssessmentData.Assessment_Time, 
qryAssessmentData.Rescue_Analgesia, qryAssessmentData. 
[Review By], qryAssessmentData.Assessment_Grade, 
qryAssessmentData.Assessment_Notes
FROM (PatientDB INNER JOIN DailyAssessment ON 
PatientDB.Patient_UID = DailyAssessment.Patient_UID) 
INNER JOIN qryAssessmentData ON MaxOfAssessment_UID = 
qryAssessmentData.Assessment_UID
GROUP BY PatientDB.Patient_UID, 
qryAssessmentData.Assessment_Date, 
qryAssessmentData.Assessment_Time, 
qryAssessmentData.Rescue_Analgesia, qryAssessmentData. 
[Review By], qryAssessmentData.Assessment_Grade, 
qryAssessmentData.Assessment_Notes;

Однако я получаю сообщение об ошибке «Не поддерживается выражение JOIN», и оно выделяет: «JOIN qryAssessmentData ON MaxOfAssessment_UID = qryAssessmentData.Assessment_UID '.

У кого-нибудь есть идеи, как этого добиться - или более простой метод, или я просто делаю что-то не так?У меня достаточно базовое понимание SQL, поэтому любые предложения приветствуются!

Большое спасибо.

1 Ответ

0 голосов
/ 06 октября 2018

Вы не можете использовать псевдоним столбца во второй раз - ни в SELECT, ни WHERE, ни ON (хорошо, вы можете в ORDER BY).

Вы не делаетевсе равно хочу агрегацию.Вы просто хотите фильтровать.

Если я правильно понимаю, вы хотите что-то вроде этого:

SELECT . . .
FROM PatientDB as p INNER JOIN
     DailyAssessment as da
     ON p.Patient_UID = da.Patient_UID
WHERE da.Assessment_UID = (SELECT MAX(da2.Assessment_UID)
                           FROM DailyAssessment da2
                           WHERE da2.Patient_UID = da.Patient_UID
                          );

Примечания:

  • Ваш вопрос не указывает на то, чтотретья таблица предназначена для.
  • Ваш вопрос не указывает, как определить, активен ли пациент.
  • Здесь вводятся псевдонимы таблиц, поэтому ваш запрос легче писать и читать.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...