Доступ к VBA SQL: найти максимальную дату и получить идентификатор строки

Я использую MS-Access 2007 со связанной базой данных MS-SQL с 2 таблицами.

Одна таблица — это сведения об инвентаризации, другая — отслеживание инвентаря, отслеживание состояния каждого инвентаря (по идентификатору) на определенную дату.

Мне нужно получить TrackID для каждого InvenotryID по максимальному значению даты, чтобы я мог получить последний статус каждого элемента инвентаря.

Inventory table: ID, Details, etc.

Track table: ID, Inventory (ID), TDate, Status, Branch.

Пример таблицы дорожек:

   ID | Inv. | TDate | Status   
   332|    4 | 02/03 | free   
   342|    6 | 02/12 | working   
   346|    4 | 02/09 | working   
   347|    7 | 02/11 | repairs   
   349|    5 | 02/05 | repairs   
   352|    6 | 02/13 | free   
   355|    5 | 01/28 | working   
   356|    7 | 02/14 | free

запрос должен получить:

   TrackID | Inv. | TDate | Status   
   346     | 4    | 02/09 | working   
   355     | 6    | 02/13 | free   
   356     | 7    | 02/14 | free   
   349     | 5    | 02/05 | repairs

примечание: TrackID не обязательно является максимальным значением поля из-за нелинейной регистрации статуса.

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


person d.mckeithen    schedule 09.03.2014    source источник


Ответы (1)


Возможно:

SELECT test.ID, test.Inv, test.TDate, test.Status
FROM test INNER JOIN 
   (SELECT test.Inv, Max(test.TDate) AS MaxOfTDate
    FROM test
    GROUP BY test.Inv)  AS q 
ON (test.TDate = q.MaxOfTDate) AND (test.Inv = q.Inv)
GROUP BY test.ID, test.Inv, test.TDate, test.Status;

Где test - это имя вашей таблицы.

person Fionnuala    schedule 09.03.2014
comment
вау, Рему, большое спасибо. сложный, короткий и работает как шарм :) - person d.mckeithen; 20.03.2014