SQL запрос. Вроде простая задача, но не получается

Рейтинг: 0Ответов: 1Опубликовано: 10.05.2023

Прошу помощи с формированием запроса MySQL запроса. Битый час бьюсь, но не получается (

Две таблицы:

  1. post

-id

-title

  1. post_status:

-id

-post_id = id из первой таблицы post

-post_status_id

-date_at

нужно: выбрать все записи из таблицы post, у которых на конкретную дату был статус из списка соответственно, в параметры запроса приходит дата и массив допустимых статусов. На выходе - записи из таблицы post. Думал сделать так:

SELECT * FROM post WHERE id IN (SELECT post_id FROM post_status_id WHERE status_id IN (1,2) AND date_at < "2023-05-01 00:00:00" GROUP BY post_id ORDER BY id DESC);

но уже во вложенном запросе (SELECT post_id FROM post_status_id WHERE status_id IN (1,2) AND date_at < "2023-05-01 00:00:00" GROUP BY post_id ORDER BY id DESC) получаю ошибку: #1055 - Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'base.post_status.post_status_id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

#1055 - Выражение #2 списка SELECT отсутствует в предложении GROUP BY и содержит неагрегированный столбец 'base.post_status.post_status_id', который функционально не зависит от столбцов в предложении GROUP BY; это несовместимо с sql_mode=only_full_group_by Хочется написать правильный запрос без отключения only_full_group_by. Это ведь явно возможно )...

Ответы

▲ 0

ну вроде получилось )

SELECT * FROM post WHERE id IN (SELECT post_id
 FROM post_status
 WHERE id IN (SELECT MAX(id) FROM post_status WHERE date_at<"2023-05-10 04:00:00" GROUP BY post_id) AND status_id IN (1,2))