SQL-запрос для выбора всего, кроме максимального значения - PullRequest
6 голосов
/ 25 июля 2009

У меня есть довольно сложный запрос, который собирает данные из трех таблиц, и теперь я хочу, чтобы он был еще более сложным (О, дорогой)!

Я бы хотел, чтобы последняя опубликованная функция отображалась в нем. собственный раздел страницы, и это довольно просто, выбрав последнюю запись в таблице. Однако для сложного запроса (главной страницы сайта) я бы хотел, чтобы эта функция НЕ отображалась.

Я бы хотел union следующий запрос к моему предыдущему запросу. , но не возвращает правильные результаты:

SELECT
    features.featureTitle AS title, 
    features.featureSummary AS body, 
    features.postedOn AS dummy, 
    DATE_FORMAT( features.postedOn,  '%M %d, %Y' ) AS posted, 
    NULL, 
    NULL, 
    staff.staffName, 
    features.featureID 
FROM 
    features 
    LEFT JOIN staff ON 
        features.staffID = staff.staffID 
WHERE features.postedOn != MAX(features.postedOn)
ORDER BY dummy DESC LIMIT 0,15

Этот запрос возвращает следующую ошибку:

Ошибка MySQL: # 1111 - Неправильное использование групповой функции

Есть ли способ обойти это?

Ответы [ 2 ]

6 голосов
/ 25 июля 2009

Запрос max должен быть в своем собственном подзапросе, поэтому ваш окончательный SQL должен быть ::

SELECT features.featureTitle AS title,
    features.featureSummary AS body, 
    features.postedOn AS dummy,
    DATE_FORMAT( features.postedOn,  '%M %d, %Y' ) AS posted,
    NULL,
    NULL,
    staff.staffName,
    features.featureID 
FROM 
    features 
    LEFT JOIN staff ON 
        features.staffID = staff.staffID
WHERE
   features.postedOn != (select max(features.postedOn) from features)
0 голосов
/ 25 июля 2009

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

вы можете использовать дополнительный выбор для получения идентификатора последней функции:

WHERE featureId <> (SELECT featureId From features ORDER BY postedOn DESC LIMIT1)

есть проблема с этим подходом - отбор выполняется для каждой строки, но этоне так дорого.

...