Как получить самую последнюю запись в предложении GROUP BY с отсортировкой по дате в MySQLMySql

Форум по Mysql
Ответить Пред. темаСлед. тема
Anonymous
 Как получить самую последнюю запись в предложении GROUP BY с отсортировкой по дате в MySQL

Сообщение Anonymous »

У меня есть две таблицы, определенные следующим образом:
Рекламное объявление создается пользователем и сохраняется в этой таблице:

Код: Выделить всё

CREATE TABLE `classifieds` (
`ClassifiedAdID` mediumint NOT NULL,
`CustomerID` smallint NOT NULL,
`AdTitle` varchar(128) COLLATE utf8mb4_general_ci NOT NULL,
`AdText` varchar(8192) COLLATE utf8mb4_general_ci NOT NULL,
`AdImageList` varchar(4096) COLLATE utf8mb4_general_ci NOT NULL,
`Status` varchar(32) COLLATE utf8mb4_general_ci NOT NULL,
`DateSubmitted` datetime NOT NULL,
`ExpiryDate` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
Затем администратор может принять или отклонить его, используя форму, результаты которой сохраняются в этой таблице:

Код: Выделить всё

CREATE TABLE `officeaction` (
`OfficeActionID` mediumint NOT NULL,
`FormContext` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`FormID` smallint NOT NULL,
`Result` varchar(64) COLLATE utf8mb4_general_ci NOT NULL,
`ActionByID` smallint NOT NULL,
`ActionBy` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`Remarks` varchar(8096) COLLATE utf8mb4_general_ci NOT NULL,
`ActionDate` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
Обе таблицы индексируются по соответствующему идентификатору. Я использовал следующий запрос

Код: Выделить всё

SELECT classifieds.*, officeaction.* FROM `classifieds` JOIN `officeaction` ON classifieds.ClassifiedAdID = officeaction.FormID WHERE officeaction.FormContext = 'Classifieds' ORDER BY classifieds.ClassifiedAdID, officeaction.ActionDate DESC;
и получите такой результат:
Изображение

Как видите, рубрикированное объявление № 11 было отклонено один раз и принято дважды, а «Принять» — самое последнее действие. Итак, я хочу получить эту запись (OfficeActionID № 11). Однако если я использую GROUP BY (как показано ниже), я получаю самую старую запись (OfficeActionID #9), а не самую последнюю. Поскольку я сортирую по дате (DESCending), я должен получить то, что хочу, но видимо (согласно той документации, которую мне удалось найти) невозможно предсказать, какая запись будет показана.
Как я могу это сделать? написать запрос, который даст мне то, что я хочу? Я просмотрел этот вопрос и ответы на него (я перевел ответы в MySQL), но у меня это не работает.

Подробнее здесь: https://stackoverflow.com/questions/793 ... e-in-mysql
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «MySql»