SQL-заявление, имеющее max (некоторые + вещь) = некоторые + вещь

StackOverflow https://stackoverflow.com/questions/2670608

Вопрос

У меня проблемы с Microsoft Access 2003, оно жаловаться на это утверждение:

select cardnr
from change
where  year(date)<2009
group by cardnr
having max(time+date) = (time+date) and cardto='VIP'

То, что я хочу сделать, потому что для каждого отчетливого Cardnr в замене таблицы, чтобы найти ряд с последней (время + дата), которая находится до 2009 года, а затем просто выберите строки с Cardto = 'vip'.

Этот валидатор говорит, что все в порядке, доступ говорит, что это не в порядке.

Это сообщение, которое я получаю: «Вы пытались выполнить запрос, который не включает указанное выражение« MAX (время + дата) = время + дата и CARDTO = «VIP» и Cardnr = 'как часть агрегатной функции. "

Может ли кто-нибудь, пожалуйста, объясните, что я делаю не так, и правильный способ сделать это? Спасибо

Примечание. Поле и имена таблиц переведены и не сталкиваются с любыми зарезервированными словами, у меня нет проблем с именами.

Это было полезно?

Решение

Попробуйте подумать об этом, как это - наносится после выполнения агрегации. Поэтому он не может сравниться с неугрегированными выражениями (ни за время + дата, ни для Cardto).

Однако, чтобы получить последний (принцип такой же для получения строк, связанных с другими агрегированными функциями, как WEEL) Время и дата, вы можете сделать что-то вроде:

SELECT cardnr
FROM change main
WHERE time+date IN (SELECT MAX(time+date) 
                    FROM change sub
                    WHERE sub.cardnr = main.cardnr AND 
                          year(date)<2009 
                          AND cardto='VIP')

(Предполагая, что часть даты на вашем поле времени одинакова для всех записей; имея два поля на дату / время не в ваших интересах, а также с использованием зарезервированных слов для имен полей могут быть нанесены в определенные случаи)

Он работает, потому что подзапрос фильтрован только на записях, которые вас интересуют из внешнего запроса.

Применение того же года (дата) <200 и CARDTO = «VIP» на внешний запрос может повысить производительность.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top