'Самая большая дата до' в предложении WHERE (метод OleDB SELECT) - PullRequest
0 голосов
/ 26 мая 2020

Я импортирую данные из Access DB file в Excel, используя VBA, и у меня возникают проблемы с предложением WHERE в одном из моих запросов. Это не столько техническая сложность. Это больше похоже на стратегию сложность.

Прямо сейчас, после установки sh соединения,

Dim prv As String: prv = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                         "Data Source=..." & _
                         "Jet OLEDB:Database Password=..."
Dim DBcon As New Connection
DBcon.Open prv 

я использую следующий запрос:

Dim BDrcs As New Recordset
RC01.Open "SELECT * from Table1 WHERE Field1=Dateserial(2020,5,26)", DBcon

Для целей, для которых это предназначено, код работает нормально! Однако моя цель - получить Table1 значения WHERE Field1 - это большая дата перед 2020/05/26, если есть не любые записи с датой 2020/05/26.

Возможно ли сделать это по одному запросу?

Пожалуйста, не беспокойтесь об альтернативном методе ответа (не то чтобы я не хотел, просто не обязательно). Я знаю, что раньше я всегда мог получить все данные из таблицы (или, по крайней мере, все данные до 2020/05/26), проверить более позднюю дату, а затем снова получить данные. Я просто пытаюсь получить данные одним запросом, если это вообще возможно ...

1 Ответ

1 голос
/ 26 мая 2020

Если использование Max не работает, вы можете попробовать выполнить подзапрос, используя TOP. Что-то вроде:

SELECT A.*
FROM Table1 AS A 
WHERE A.Field1=
    (SELECT DISTINCT TOP 1 B.Field1 FROM Table1 AS B 
    WHERE B.Field1<=DateSerial(2020,5,26) 
    ORDER BY B.Field1 DESC)

С уважением,

...