Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Выбор наибольшей даты из группы значений (sql запрос) / 12 сообщений из 12, страница 1 из 1
04.02.2018, 17:46
    #39596382
Tonio
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор наибольшей даты из группы значений (sql запрос)
Добрый день.

Есть таблица значений:
№ вагона Дата отправления
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

Код следующий:
Код: vbnet
1.
2.
3.
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
...
Рейтинг: 0 / 0
04.02.2018, 18:12
    #39596391
Tonio
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор наибольшей даты из группы значений (sql запрос)
Спешу добавить: в таблице есть другие поля, которые нужно вывести, поэтому использую
Код: vbnet
1.
strQuery = "SELECT * FROM " & strPath & " WHERE [Дата отправления] IN (SELECT MAX([Дата отправления]) FROM " & strPath & " GROUP BY [№ вагона]) ORDER BY [№ вагона], [Дата отправления] DESC ;"


вместо
Код: vbnet
1.
strQuery = "SELECT [№ вагона], MAX([Дата отправления]) FROM " & strPath & " GROUP BY [№ вагона] ;"
...
Рейтинг: 0 / 0
04.02.2018, 18:21
    #39596395
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор наибольшей даты из группы значений (sql запрос)
проблема в этом:
Tonio
Код: vbnet
1.
WHERE [Дата отправления] IN

отбираются все строки, у которых дата совпадает с ЛЮБОЙ максимальной датой по любым вагонам
...
Рейтинг: 0 / 0
04.02.2018, 18:22
    #39596397
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор наибольшей даты из группы значений (sql запрос)
нужно приджойниться к внутреннему запросу по дате И номеру вагона
...
Рейтинг: 0 / 0
04.02.2018, 19:01
    #39596418
Tonio
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор наибольшей даты из группы значений (sql запрос)
Shocker.Pro,

Помогите, пожалуйста, составить запрос....я с этой проблемой второй день воюю, выбился из сил)
...
Рейтинг: 0 / 0
04.02.2018, 19:27
    #39596427
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор наибольшей даты из группы значений (sql запрос)
Код: sql
1.
2.
3.
4.
5.
SELECT MyTable.* FROM
  (SELECT Max(Date) AS MaxDate, WagonNo
   FROM MyTable
   GROUP BY WagonNo) AS T
  INNER JOIN MyTable ON T.MaxDate=MyTable.Date AND T.WagonNo=MyTable.WagonNo



как-то так
...
Рейтинг: 0 / 0
04.02.2018, 20:34
    #39596445
Tonio
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор наибольшей даты из группы значений (sql запрос)
Shocker.Pro,

Прошу прощения за назойливость и некомпетентность, но пытаюсь адаптировать ваш пример

Код: vbnet
1.
strQuery = "SELECT MyTable.* FROM (SELECT Max([Дата отправления]) AS MaxDate, [№ вагона] FROM " & strPath & " GROUP BY [№ вагона]) AS T INNER JOIN " & strPath & " ON T.MaxDate=MyTable.[Дата отправления] AND T.[№ вагона]=MyTable.[№ вагона];"


Ошибка синтаксиса в предложении FROM.

Куда именно вставить путь к файлу strPath?
...
Рейтинг: 0 / 0
04.02.2018, 21:09
    #39596457
Tonio
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор наибольшей даты из группы значений (sql запрос)
Рекомендовали ещё такой способ:
Код: vbnet
1.
2.
3.
4.
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 [Дата отправления] IN (SELECT MAX([Дата отправления]) " & " FROM " & strPath1 & " WHERE t1.[№ вагона]=t.[№ вагона]) " & " ORDER BY [№ вагона], [Дата отправления] DESC ;"


Он сработал, но хотелось бы научиться пользоваться методом JOIN.
...
Рейтинг: 0 / 0
04.02.2018, 21:31
    #39596463
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор наибольшей даты из группы значений (sql запрос)
TonioОн сработалну можно и так

TonioОшибка синтаксиса в предложении FROM.ну я абстрактно писал, MyTable - это имя вашей таблицы. Можно использовать псевдоним таблицы

Код: sql
1.
2.
3.
4.
5.
SELECT TOuter.* FROM
  (SELECT Max(Date) AS MaxDate, WagonNo
   FROM MyTable
   GROUP BY WagonNo) AS TInner
  INNER JOIN MyTable AS TOuter ON TInner.MaxDate=TOuter.Date AND TInner.WagonNo=TOuter.WagonNo
...
Рейтинг: 0 / 0
04.02.2018, 22:17
    #39596469
Tonio
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор наибольшей даты из группы значений (sql запрос)
Shocker.Pro,

Спасибо за помощь, пойду учить матчасть.
...
Рейтинг: 0 / 0
05.02.2018, 07:30
    #39596519
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор наибольшей даты из группы значений (sql запрос)
Tonio,

вот еще вариант
Код: sql
1.
2.
3.
4.
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 ;"



только он не сработает, если один вагон будет иметь две отправки в один день
...
Рейтинг: 0 / 0
05.02.2018, 15:44
    #39596853
Tonio
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор наибольшей даты из группы значений (sql запрос)
HandKotTonio,

вот еще вариант
Код: sql
1.
2.
3.
4.
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 ;"


Да, тоже работает! Спасибо за помощь!

HandKotтолько он не сработает, если один вагон будет иметь две отправки в один день
Он срабатывает как раз таки, как мне надо....то есть, если у одного вагона две отправки в один день, вторая строка остается.
То, что нужно!
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Выбор наибольшей даты из группы значений (sql запрос) / 12 сообщений из 12, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]