Выбор наибольшей даты из группы значений (sql запрос)

Добрый день.Через ADO DB подключаюсь к таблице EXCEL:№ вагона Дата отправления 58266867 17.01.2018 58267055 10.01.2018 58267311 22.01.2018 58267311 05.01.2018 58268129 11.01.2018 76601145 22.01.2018 76601145 01.01.2018 76601483 29.01.2018 76601483 11.01.2018 76601509 20.01.2018 76601731 20.01.2018 76601731 07.01.2018 76622703 30.01.2018 76622703 10.01.2018 94292976 18.01.2018 94759735 12.01.2018Пытаюсь для каждого вагона получить наибольшую дату, то есть, результат должен быть:№ вагона Дата отправления 58266867 17.01.2018 58267055 10.01.2018 58267311 22.01.2018 58268129 11.01.2018 76601145 22.01.2018 76601483 29.01.2018 76601509 20.01.2018 76601731 20.01.2018 76622703 30.01.2018 94292976 18.01.2018 94759735 12.01.2018Код следующий:
strPath = "[Отчет1$] IN '" & ActiveDocument.Path & "\ОтгрузкаТест.xlsx' " & "[Excel 12.0;Provider=Microsoft.ACE.OLEDB.12.0;Mode=Read;Extended Properties='HDR=YES;']"
 
strQuery = "SELECT * FROM " & strPath & " WHERE [Дата отправления] IN (SELECT MAX([Дата отправления]) FROM " & strPath & " GROUP BY [№ вагона]) ORDER BY [№ вагона], [Дата отправления] DESC ;"
Не могу понять в чем причина, но результат получается следующим:№ вагона Дата отправления 58266867 17.01.2018 58267055 10.01.2018 58267311 22.01.2018 58268129 11.01.2018 76601145 22.01.2018 76601483 29.01.2018 76601483 11.01.2018 76601509 20.01.2018 76601731 20.01.2018 76622703 30.01.2018 76622703 10.01.2018 94292976 18.01.2018 94759735 12.01.2018Два значения не отфильтровались 76601483, 76622703Спешу добавить: в таблице есть другие поля, которые нужно вывести, поэтому использую
strQuery = "SELECT * FROM " & strPath & " WHERE [Дата отправления] IN (SELECT MAX([Дата отправления]) FROM " & strPath & " GROUP BY [№ вагона]) ORDER BY [№ вагона], [Дата отправления] DESC ;"
вместо
strQuery = "SELECT [№ вагона], MAX([Дата отправления]) FROM " & strPath & " GROUP BY [№ вагона] ;"
2 ответа

Надо искать не просто максимум даты, а именно тот, который связан с номером вагона. А в подзапросе нет ссылки на номер из главного запроса.
strQuery = "SELECT * FROM " & strPath & _
& " WHERE [Дата отправления] IN (SELECT MAX([Дата отправления]) " _
    & " FROM " & strPath1 _
    & " WHERE t1.[№ вагона]=t.[№ вагона]) " _
& " ORDER BY [№ вагона], [Дата отправления] DESC ;"
Введена новая переменная strPath1, чтобы различить поля запроса и подзапроса
strPath = "[Отчет1$] as t IN '" & ActiveDocument.Path _
& "\ОтгрузкаТест.xlsx' " & "[Excel 12.0;Provider=Microsoft.ACE.OLEDB.12.0;Mode=Read;Extended Properties='HDR=YES;']"
strPath1 = "[Отчет1$] as t1 IN '" & ActiveDocument.Path _
& "\ОтгрузкаТест.xlsx' " & "[Excel 12.0;Provider=Microsoft.ACE.OLEDB.12.0;Mode=Read;Extended Properties='HDR=YES;']"


mobile, спасибо! То, что нужно. А можно получить тот же результат методом JOIN? Как-нибудь так?:
SELECT MyTable.* FROM
  (SELECT MAX([Дата отправления]) AS MaxDate, [№ вагона]
   FROM MyTable
   GROUP BY [№ вагона]) AS T
  INNER JOIN MyTable ON T.MaxDate=MyTable.[Дата отправления] AND T.[№ вагона]=MyTable.[№ вагона]
Ещё один способ добрые люди подсказали:
strPath = "[Отчет1$] as t IN '" & ActiveDocument.Path & "\ОтгрузкаТест.xlsx' " & "[Excel 12.0;Provider=Microsoft.ACE.OLEDB.12.0;Mode=Read;Extended Properties='HDR=YES;']"
strPath1 = "[Отчет1$] as t1 IN '" & ActiveDocument.Path & "\ОтгрузкаТест.xlsx' " & "[Excel 12.0;Provider=Microsoft.ACE.OLEDB.12.0;Mode=Read;Extended Properties='HDR=YES;']"
  
strQuery = "SELECT * FROM " & strPath & " WHERE Not Exists  (SELECT 1 FROM " & strPath1 & " WHERE t1.[№ вагона]=t.[№ вагона] And t1.[Дата отправления] > t.[Дата отправления]) " & " ORDER BY [№ вагона], [Дата отправления] DESC ;"