Итак, у меня есть таблица, и я хочу получить значение из одного поля в записи с наибольшим значением DateTime () в другом поле, где еще одно поле равно определенному значению.
Пример данных:
Balance Created MeterNumber
7924.252 02/02/2010 10:31:48 AM 2743800
7924.243 02/02/2010 11:01:37 AM 2743876
7924.227 02/02/2010 03:55:50 PM 2743876
Я хочу получить баланс для записи с наибольшим временем создания для определенного номера счетчика. В VFP 7 я могу использовать:
SELECT a.balance ,MAX(a.created) FROM MyTable a WHERE a.meternumber = '2743876'
Но в драйвере OleDb VFP v8.0, который я использую на своей странице ASP.NET, я должен соответствовать VFP 8, в котором говорится, что вы должны иметь GROUP BY, перечисляющий каждое неагрегированное поле, указанное в SELECT. Это вернет запись для каждого баланса, если я добавлю GROUP BY a.balance
к моему запросу.
Да, я мог бы выдать SET ENGINEBEHAVIOR 70
, но я хотел знать, можно ли это сделать, не возвращаясь к предыдущей версии?
EDIT
Я заставил запрос Фрэнка Переса работать, но только после преобразования полей DateTime в Character для предложения SQL IN. Обратите внимание на перенос полей DateTime с помощью функции TTOC ().
SELECT ;
MyTable.created, ;
MyTable.balance ;
FROM ;
MyTable ;
WHERE ;
( MyTable.meternumber = '2743876' ) ;
AND ( TTOC(MyTable.created) IN (SELECT TTOC(MAX(created)) FROM MyTable WHERE (meternumber = '2743876')) ) ;