2016-05-08 3 views
0

Я пытаюсь обновить базу данных тестирования PAT, которая изначально написана в доступе 2003. Я использую HTML-стиль и подключение ActiveX для получения данных из базы данных доступа. Я новичок в кодировании и в основном нахожу большинство своих ответов через google. В настоящее время я не понимаю, как написать SQL-запрос, который находит последнюю дату тестирования устройства. Информация в базе данных находится в 4 таблицах базы данных. (Извините за форматирование таблиц).Последняя дата в SQL с четырьмя связанными таблицами

Appliance_Details

+-------+------------------+----------+------------+ 
| PATID | ShortDescription | Location | Department | 
+-------+------------------+----------+------------+ 
| FD110 |    1 | Room 125 |   1 | 
| FD113 |    2 | Room 125 |   1 | 
| FD114 |    3 | Room 125 |   1 | 
+-------+------------------+----------+------------+ 

Appliance_Description

+--------+----------------+ 
| Number | AppDescription | 
+--------+----------------+ 
|  1 | Microwave  | 
|  2 | Food Steamer | 
|  3 | Smoothie Maker | 
+--------+----------------+ 

Department_List

+--------+-------------------+ 
| Number | Department  | 
+--------+-------------------+ 
|  1 | Food Technology | 
|  2 | Art    | 
|  3 | Humanities  | 
+--------+-------------------+ 

Test_Results

+-------+---------+----------+ 
| PATID | AppPass | TestDate | 
+-------+---------+----------+ 
| FD110 | Pass | 23/04/15 | 
| FD110 | Pass | 04/04/14 | 
| FD110 | Pass | 10/04/13 | 
| FD113 | Pass | 23/04/15 | 
| FD113 | Fail | 04/04/14 | 
| FD113 | Pass | 10/04/13 | 
| FD114 | Pass | 23/04/15 | 
| FD114 | Pass | 04/04/14 | 
| FD114 | Pass | 10/04/13 | 
+-------+---------+----------+ 

Запрос SQL У меня есть до сих пор: -

SELECT l.department, d.PATID AS Appliance, AppDescription As Type, Location, AppPass AS Result, TestDate 
FROM (Department_List AS l INNER JOIN (Appliance_Description AS a INNER JOIN Appliance_Details AS d ON a.Number = d.ShortDescription) ON l.Number = d.Department) INNER JOIN Test_Results AS t 
ON d.PATID = t.PATID 
ORDER BY l.department, d.PATID 

Что дает результаты

+------------+-------+----------------+----------+--------+----------+ 
| Department | PATID |  Type  | Location | Result | TestDate | 
+------------+-------+----------------+----------+--------+----------+ 
| Design  | FD110 | Microwave  | Room 125 | Pass | 23/04/15 | 
| Design  | FD110 | Microwave  | Room 125 | Pass | 04/04/14 | 
| Design  | FD110 | Microwave  | Room 125 | Pass | 10/04/13 | 
| Design  | FD113 | Food Steamer | Room 125 | Pass | 23/04/15 | 
| Design  | FD113 | Food Steamer | Room 125 | Fail | 04/04/14 | 
| Design  | FD113 | Food Steamer | Room 125 | Pass | 10/04/13 | 
| Design  | FD114 | Smoothie Maker | Room 125 | Pass | 23/04/15 | 
| Design  | FD114 | Smoothie Maker | Room 125 | Pass | 04/04/14 | 
| Design  | FD114 | Smoothie Maker | Room 125 | Pass | 10/04/13 | 
+------------+-------+----------------+----------+--------+----------+ 

То, что я хочу, чтобы SQL-запрос, чтобы сделать, это вернуть последнюю дату. Я знаю, что мне нужно использовать функцию max, и у меня есть этот SQL-запрос, но я не уверен, как присоединиться к этой заявке SQL.

SELECT MAX(t.TestDate) AS LastTestDate, t.PATID FROM Test_Results AS t GROUP BY t.PATID 

Это должно дать мне результаты, как показано ниже

+-------------+---------+------------------+------------+----------+-----------------+ 
| Department | PATID |  Type  | Location | Result | LastTestDate | 
+-------------+---------+------------------+------------+----------+-----------------+ 
| Design  | FD110 | Microwave  | Room 125 | Pass | 23/04/15  | 
| Design  | FD113 | Food Steamer | Room 125 | Pass | 23/04/15  | 
| Design  | FD114 | Smoothie Maker | Room 125 | Pass | 23/04/15  | 
+-------------+---------+------------------+------------+----------+-----------------+ 

ответ

0

Вы должны использовать MAX с GROUP BY (смотри пример ниже). Добавление или удаление столбцов из SELECT/GROUP BY позволит MAX работать на разных уровнях, например. последняя дата испытания в определенном месте и т. д.

SELECT l.department, 
    d.PATID AS Appliance, 
    AppDescription As Type, 
    Location, 
    AppPass AS Result, 
    MAX(t.TestDate) AS LastTestDate 
FROM (Department_List AS l INNER JOIN (Appliance_Description AS a INNER JOIN Appliance_Details AS d ON a.Number = d.ShortDescription) ON l.Number = d.Department) 
INNER JOIN Test_Results AS t ON d.PATID = t.PATID 
GROUP BY l.department, d.PATID, AppDescription, Location, AppPass 
ORDER BY l.department, d.PATID 
+0

Спасибо, что именно я пытался! Я пытался присоединиться ко второму запросу SELECT. Возможно, я решил переместить MAX (t.TestDate) в SELECT, но я бы никогда не понял, что мне нужно сгруппировать все выбранные элементы. Это натолкнуло меня на последнюю неделю. –

Смежные вопросы