Я считаю, что многие люди уже задали этот вопрос, поскольку я прочитал всю эту тему отсюда. Но проблема в том, что у меня есть 3 связанные таблицы вместо 2, и я не уверен, как код для этогоSQL Access 2007/2010 Выбор даты с отличным идентификатором
У меня есть таблица: tbl_Instruments
, tbl_Record
и tbl_Cal_By
. tbl_Instruments
содержит информацию о всех инструментах, включая идентификатор. tbl_Cal_By
имеет информацию для тех, кто калибрует инструмент. tbl_Records
располагает всеми инструментами записей и их дата калибровки. Он наследует идентификатор от tbl_Instruments
как Inst_ID и имя от tbl_Cal_By
как Name_ABBR.
tbl_Instruments: ID, Тип
tbl_Cal_By: Cal_ID, Name_ABBR
tbl_Records: record_id, Inst_ID, Cal_Date, Name_ABBR
Вот мой код.
SELECT tbl_Records.Inst_ID
,tbl_Instruments.Type
,Max(tbl_Records.Cal_Date) AS MaxOfCal_Date
,tbl_Cal_By.Name_ABBR
FROM tbl_Cal_By
RIGHT JOIN (
tbl_Instruments INNER JOIN tbl_Records ON tbl_Instruments.ID = tbl_Records.Inst_ID
) ON tbl_Cal_By.ID = tbl_Records.BY
GROUP BY tbl_Records.Inst_ID
,tbl_Instruments.Type
,tbl_Cal_By.Name_ABBR;
Желаемый результат:
Любая помощь будет оценен по достоинству!
Это работает отлично! Но не возражаете ли вы объяснить последнюю часть, начиная с WHERE? Извините im kinda new to sql ~~ –
Конечно, я также буду признателен, если вы примете мой ответ (V). Там, где используется функция NOT EXISTS, которая проверяет, возвращает ли запрос после возврата что-то или нет. Он будет фильтровать любую строку, которая возвращает что-то там. Итак, что я сделал, для каждой записи, проверьте, есть ли более крупная дата, а затем одна, если это так - она отфильтровывает ее из результата. Это оставит нам только последние даты. @JasonChan – Yossi
Я знаю, что это было давно, но недавно я добавил tbl_Records.Path, и старый вопрос вернулся. Поэтому, чтобы отфильтровать его снова, я попытался добавить «AND t.Path = tbl_Records.Path», но похоже, что это неправильно? –